5、大型项目的接口自动化实践记录----登录
练完手,我们就开始对ERP实际业务做自动化,先来看一下登录
因为没有接口文档,所以我们要自己手工去抓下包,这里用fiddler
一、登录接口抓包
1、清除缓存
在抓包前,先清除浏览器缓存,以免后面抓到过多没用的数据(可以自行试下不清的情况下抓包)
清除方式如下图,F12->缓存->清除域的Cookie
抓包
fiddler的相关配置,网上很容易搜到,这里不做介绍
1)打开fiddler,打开浏览器,访问登录页面
从页面上,我们可以看到的入参包括:
登录类型:域账户、ERP账户
用户名
密码
登录日期
2)前端登录,查看抓到的包
抓到了5个请求,第一个为访问登录页面,第二个为登录,中间经过三次重定向,最后访问网站主页
2、登录请求
我们要登录,所以看一下第二个请求
先看请求头:
除了前面说到过的请求头信息Content-Type、User-Agent外,发现还有一个ssosessionid
再看一下请求的data:
同样发现除登录类型、用户名、密码、日期外,多了几个参数
service:要登录的地址(因为有多个分支环境)
_eventId、submit、languageid这三个参数比较好理解,也没什么用
lt、execution前端也没有填,哪里来的呢?
综上,多了三个非预期的入参lt | execution | ssosessionid,去看一下访问登录页面的请求,是不是那时候给了这三个值
3、访问登录页面
1)ssosessionid获取
看了下第一个请求返回的cookies信息,果然是这个时候服务器给的
PS:这里是因为访问SSO(单点登录系统),对方会给一个sessionid
2)lt、execution获取
看完返回的cookies,里面没有lt、execution,我们再看一下返回的文本视图TextView,果然看到了lt、execution
PS:这里似乎是开发使用的框架自己带的效果
二、登录实现
1、登录接口信息
前面把登录所需要的信息都抓到了,先汇总一下
URL:https:xxx.com:端口号
URI:/sso/login
cookies:ssosessionid(访问登录页时返回)
headers:用默认请求头即可,x-requested-with=XMLHttpRequest Content-Type=application/x-www-form-urlencoded User-Agent=Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0)
入参:
①service、ldap_login、username、password、usertype(登录填写)
②lt、execution(访问登录页返回)
③_eventId、submit、languageid(无用信息)
预期返回:JSESSIONID
2、登录实现
1)先访问登录页面,获取ssosessionid、lt、execution
如下图,先访问登录页,获取ssosessionid、lt、execution
其中get请求方法,封装了Create Session、Get Request等,见上一篇
ssosessionid:${resp.cookies['ssosessionid']}
lt、execution:
①先通过正则,re.findall('name="lt" value="[^/]*','''${resp.text}'''),获取从name开始,到第一个/前的文本
PS:前端返回的文本如下,即name="lt" value="LT-229-lNR4cCzNk5oBveR1bzNRObNKH2HpIb-cas01.example.org"
②然后根据符号"分割上面的文本,分割结果为list:string.Split “
③从list里获取该值,${tmp2[-2]}
2)用获取到的信息,登录
①service、ldap_login、username、password、usertype以及登录的URL(作为参数传入)
②lt、execution、ssosessionid用1)中的方法获取
③使用以上的信息请求,并获取返回的jsessionid
3)多环境登录配置
前面实现了单个环境登录,而我们存在多个环境,各个环境有个默认测试用账号
如下图,构建配置信息
新增变量,变量名格式:端口号_变量名
如下图,URL、Service变量=${${端口号}_变量名},${端口号}作为参数传入,如xx56,则URL=${xx56_URL_登录},即可对上我们上面的配置的变量名,取到对应的值。
username、password设置默认值为None,如果不传,则用我们配置的默认账号,如果传则使用传入的
4)配置信息分离
以上实现了多环境的登录,但是可以看到,登录需要用到的data、cookies等都是揉在一起的,如果data一些字段默认值修改,或者地址变更,用户名密码变化,维护不方便,因此我们可以把配置信息分离
①地址、用户名密码等配置信息分离,3)中已经实现
②登录的data分离
③cookies分离
④使用分离后的方法登录
PS:以上分离可能看起来没什么必要,这是因为登录功能比较简单,养成习惯,因为后面功能会复杂很多。
作者:慢慢走的测试
出处:https://www.cnblogs.com/walkingtester/
交流群:636090586(备注博客园)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果喜欢我的文章,请关注我的公众号