httprunner使用(一)
最近闲来无事翻开论坛闲逛看到了一款基于python语言的开源接口测试工具httprunner,这款工具初始体验就是它的测试用例是维护在一个yml格式或者json格式的数据文件中。只要维护好了这个文件,然后一键命令执行就可以得到想要的结果,而且这种文件生成也非常的方便,使用fiddler可以导出har格式文件然后命令转换为yml或者json格式。这个工具看起来简直就是为我等测试懒人量身打造的,不用更待何时!!
关于安装httprunner
一行命令即可搞定 pip install httprunner
升级httprunner版本: pip install -U httprunner
查看httprunner版本:hrun -V
查看har插件版本:har2case -V
注:httprunner最好是在python3环境当中安装,以免出现兼容性问题。
fiddler导出har文件
(一)学会用fiddler导出har文件
fiddler抓包相信大多数有经验的测试都会,不再赘述。这里抓取的是我司的系统登录,系统登录后要获取使用权限,其中登录接口后会调用另一个接口,传动态ticket给权限接口拉取用户权限。
系统打开到登录页面,打开fiddler并使其处于监测状态,登录系统,可以看到fiddler已经抓取到了这两个接口。我们先停止fiddler监控以免页面有过多数据干扰操作。
fiddler选中登录接口,File->Export Sessions->Selected Sessions->HTTPArchive v1.2导出har文件。
har文件转换为yml文件或者json文件
windows端打开命令终端窗口输入命令:har2case E:\httpTest\55.har -2y
加了-2y
的表示转换成yml文件,否则是默认转换为json文件,转换后的yml文件内容:
config:
name: testcase description
variables: {}
teststeps:
- name: /urc/motan/service/api/IUrcService/login
request:
data:
deviceName: Chrome浏览器
pwd: 密码隐藏**
userName: 用户名隐藏**
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
group: rpc-service-group-test
paramType: '2'
prefix: com.yks
version: '1.0'
method: POST
url: https://h2-test.youkeshu.com/urc/motan/service/api/IUrcService/login
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- content.msg
- 登陆成功
- eq:
- content.state
- '000001'
上面文件可以在终端输入命令执行:hrun E:\httpTest\test1.yml
,执行成功后生成测试报告:
提取响应数据
上面的登录接口要拿取到响应数据的data中的三个字段:ticket,userName,personName传给权限获取接口。提取接口响应数据是用extract
提取器,对应响应数据是json格式的我们可以用conteng.**的格式来提取,对于ticket字段,使用content.data.ticket提取。在上面的代码中加入如下代码段:
extract:
- ticket: content.data.ticket
- operator: content.data.userName
- personName: content.data.personName
变量在接口间传递
前面在登录接口响应数据中提取的参数要创给权限获取接口的request中,我们用$ticket,即前面多了一个美元符号
在这里插入代码片
url优化
在config语句块中添加,一个接口url通常由域名+资源路径组成,前面的登录接口是:https://h2-test.youkeshu.com + /urc/motan/service/api/IUrcService/login 组成。
修改成这样简化接口参数:
config:
name: testcase description
baseurl: https://h2-test.youkeshu.com
variables: {}
teststeps:
- name: 登录系统
request:
data:
deviceName: Chrome浏览器
pwd: 密码隐藏**
userName: 用户名隐藏**
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
group: rpc-service-group-test
paramType: '2'
prefix: com.yks
version: '1.0'
method: POST
url: /urc/motan/service/api/IUrcService/login
extract:
- ticket: content.data.ticket
- operator: content.data.userName
- personName: content.data.personName
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- content.msg
- 登陆成功
- eq:
- content.state
- '000001'
多个接口串联组成测试场景–查询数据
前面说了用$+字符串的形式作为变量传递,所以组合在一起的代码就是这样的:
- config:
name: testcase description
base_url: https://h2-test.youkeshu.com
- test:
name: 登录系统
request:
data:
pwd: 密码隐藏**
userName: 用户名隐藏**
headers:
Content-Type: application/x-www-form-urlencoded
group: rpc-service-group-test
paramType: '2'
prefix: com.yks
version: '1.0'
method: POST
url: /urc/motan/service/api/IUrcService/login
extract:
- ticket: content.data.ticket
- userName: content.data.userName
- personName: content.data.personName
validate:
- eq:
- status_code
- 200
- eq:
- content.msg
- 登陆成功
- eq:
- content.state
- '000001'
- eq:
- content.data.ticket
- $ticket
- test:
name: 获取权限
request:
headers:
Content-Type: application/json
group: rpc-service-group-test
paramType: '1'
prefix: com.yks
version: '1.0'
json:
funcVersion: b66ebf758783d1aced4d2c378154836b
moduleUrl: /pms/prmanage/prquery/
operator: $userName
personName: $personName
requestId: 03251416520959c722b99df50d8b1f68
ticket: $ticket
method: POST
url: /urc/motan/service/api/IUrcService/getAllFuncPermit
validate:
- eq:
- status_code
- 200
- eq:
- content.msg
- 成功
- eq:
- content.state
- '000001'
- test:
name: 查询PR单
request:
headers:
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
group: rpc-service-group-test
paramType: '1'
prefix: com.yks
version: '1.0'
json:
data:
merchandiser: yanfukun
opEmployee: yanfukun
pageData: 20
pageNumber: 1
prState: 0
searchContents: []
searchType: 1
warehouse: 0
deviceName: Chrome浏览器
funcVersion: b66ebf758783d1aced4d2c378154836b
moduleUrl: /pms/prmanage/prquery/
operator: $userName
personName: $personName
requestId: 03251416524407009e3b27d1e39147f2
ticket: $ticket
method: POST
url: /pmsservice/api/PrSearch/prSearch
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- content.state
- '000001'
- eq:
- content.msg
- 操作成功
**注:**主要yml数据格式,特别是单个接口用例和多个接口串联时的格式不同,小心调入坑中。我第一次也是在这个格式中徘徊了 一天,所以要熟悉yml的数据格式是很重要的。不熟悉的可以使用json格式来编写用例。
串联接口执行结果:
上一篇: [java] java中有意思的方法