-
使用Pycharm创建Python3虚拟环境 -
安装HttpRunner3 进入虚拟环境终端,输入pip3 install httprunner -
创建工程 输入httprunner startproject demo , 其中demo为项目工程名字 -
获取接口请求的har文件
-
使用谷歌浏览器开发者工具,右键目标接口,存储为har文件 -
使用Fiddler 在右侧My Sessions找到刚刚存储的session然后选择export为HTTPArchive v1.1即可 -
基于har文件生成测试用例 将接口的har文件存放于第三步创建工程的har目录下 cd 进入har文件夹下,运行 har2case [xxx.har] 生成对应接口har文件的 pytest 的测试文件 -
基于csv文件准备测试数据 创建csv文件testdata/Data.csv,录入测试数据,格式为 caseName,,row1,,row2
case01,,123,,456
case02,,789,,1011
这里代表有两条测试用例,每一条测试用例两个参数分别为row1和row2 -
使用csv中的参数驱动测试 在生成的接口的test Py文件里,在类中添加下列函数: @pytest.mark.parametrize(
"param",
Parameters({"caseName-row1-row2":"${parameterize(testdata/Data.csv)}"})
def test_start(self, param):
super().test_start(param)
这样就可以在请求参数中使用 “$row1” 来引用参数 row1,断言中也可以如此: .with_json(
{
"components": "$row1",
"use_case": "$row2",
}
)
.validate()
.assert_equal("status_code", "$row2")
-
执行测试用例 运行命令 hrun xxxx_test.py or hrun xxx/xxx/ 参数可以是py文件或者存放py文件夹,后者会执行该文件夹下所有的测试py文件 若要生成测试报告可以使用 hrun xxx/xxx --html=reports/report.html 即可以在reports文件夹下创建report.html文件测试报告
-
通过debugtalk.py编写自定义函数(非必需) 通过在debugtalk.py编写函数,我们就可以在测试执行的步骤中引用相应的函数,通过"${functionName($param)}" 来进行调用,其中fuctionName是函数的名称,param是要传入的参数 例如在进行断言时,**由于从csv文件读取的参数为str类型,在进行断言时若接口返回参数不是str类型,就需要进行类型转换,**这里就可以在debugtalk.py里添加函数用于处理返回结果: # csv读取数据均为str,而body不存在时类型为None,导致无法断言,所以需要将None转为''
def process_response_get_poi_by_geo(response):
body = response.body
if "error" in body:
# body.error类型转为str以便进行断言
body["error"] = str(body["error"])
else:
body["error"] = ''
if "data" in body:
if "results" in body["data"]:
# 获取结果列表长度以便进行长度校验
body["length"] = str(len(body["data"]["results"]))
return
body["data"] = {"results": [{"source": ""}]}
body["length"] = '0'
然后在测试文件里通过 "${process_response_get_poi_by_geo()}" 进行调用 .teardown_hook("${process_response_get_poi_by_geo($response)}")
- teardown_hooks: 在 HTTP 请求发送后执行 hook 函数,主要用于测试后的清理工作;也可以实现对响应的 response 进行修改,例如进行加解密等处理。
更多参考:https://docs.httprunner.org/
|