一、前言
一天,你的领导要你对某上游供应商接口做测试,你一听,接口测试,用什么做好呢 ? Postman ? Jmeter ? balabala。。。优秀的你,肯定想到了一大堆工具。当然也包括用python写。为了凸显B格,你选择了python。新建一个 xx供应商_case_1.py 文件,然后一顿猛如虎的撸代码,就好像上次文章写道:Python 3.7 自动化接口测试简单实例
代码语言:javascript复制import requests
url = "******"
header = "******"
params = "******"
response = reqeste.get(url,header,params)
jsondata = json.loads(response.text)
try:
assert ******
except:
print(******)
领导又给你派N个上游供应商接口,你开始依葫芦画瓢,流水账代码走起。完事你仔细想想总觉得不对,于是你将每个请求都封装起来,大概长这样:
代码语言:javascript复制def jk_2ys(): # V1.2.4
url = "***"
...
def jk_3ys(): # V1.2.4
url = "***"
...
def scm_location(): # V1.2.7
url = "***"
...
逐渐越积越多,领导希望你输出报告。你:“exm?”,改改改。于是你引入了Unittest单元测试框架、HTMLTestRunner等等。正打算将各个测试用例分类重新规整,你领导又来了。如果世界上有真爱这种东西存在的话,那你领导对你的爱便是了。
“我又从开发那里帮你要了100个接口过来测,开不开心?”
“你的脚本给我看下,这个是啥意思?可以在我那边运行吗?”
“你的脚本怎么这么多啊,好乱啊”
“这几个接口是串联起来的,你处理下”
…
幸好,你并没有放弃,你在某个机缘巧合下发现了一个叫HttpRunner的测试框架,这个框架使用的是yaml/json格式的文本来描述脚本,只需一行命令即可进行接口测试。在连夜研究完这个框架后,你发出慨然长叹:“原来接口测试可以这么优雅的写啊!”
二、实现
2.1 开发环境
- Python 3.7
- HttpRunner 2.2.5 # pip install httprunner hrun -V 查看版本,代表安装成功 hrun -h 查看帮助信息
2.2 项目文件结构
项目文件结构分为2种,一种是测试用例分层结构,一种是测试用例不分层结构。
代码语言:javascript复制hrun --startproject demo # 分层脚手架
利用项目脚手架直接创建测试用例分层结构,一个基本的测试用例分层结构就搞定了(懒人专用)
2.3 接口实例
- 访问地址:
http://127.0.0.1:8000/atp/mock/sjjh/clwz
- 请求类型: POST
- 请求头部: application/json
- 请求参数:
{"productid":"3100721","carid":"京A89561"}
- 返回参数:
{"biz_code":"200","biz_msg":"业务处理成功","code":200,"data":{"adr":"山东省枣庄市滕州市红荷大道与善国路红绿灯交汇处东600米路北冯河小院,东方向,220.7米","city":"枣庄市","country":"滕州市","drc":"0","lat":"21075184","lon":"70300750","province":"山东省","spd":"0.0","state":"1001","utc":"1568102254000"},"data_total":null,"msg":"请求成功","result_id":"201909100357000467d44922d2c9845f2a13fd9ea5fa92ce9","z1":null,"z2":null}
2.4 编写Yaml格式脚本
代码语言:javascript复制- config: # config模块
name: testcase location_mock # 用例集名称
variables: {} # 声明变量关键字
- test: # test模块
name: /api/carlocation_mock # 测试用例名
request: # 请求体
url: http://10.8.18.161:8080/atp/mock/sjjh/clwz # 请求路径
method: POST # 请求方式
headers: # 请求头
Content-Type: "application/json"
json: # 请求参数
productid: 3100721
carid: "京A89561"
validate: # 校验点
- eq: [status_code, 200]
- eq: [content.biz_code, "200"]
- eq: [content.biz_msg, 业务处理成功]
2.5 编写Json格式脚本
代码语言:javascript复制[{
"config": {
"name": "testcase location_mock",
"variables": {}
}
},
{
"test": {
"name": "/api/carlocation_mock",
"request": {
"url": "http://10.8.18.161:8080/atp/mock/sjjh/clwz",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"json": {
"productid": "3100721",
"carid": "京A89561"
}
},
"validate": [{
"eq": ["status_code", 200]
},
{
"eq": ["content.biz_code", "200"]
},
{
"eq": ["content.biz_msg", "业务处理成功"]
}
]
}
}
]
2.6 运行脚本
运行用例很简单,直接在cmd里面,cd到脚本目录下,运行
代码语言:javascript复制hrun post_api.yaml
或者执行json文件
代码语言:javascript复制hrun post_api.json
执行结果如下
2.7 查看测试报告
请求
响应
检查点
统计