背景
各个项目的测试小组使用的接口测试工具大部分都是Jmeter,最近要求扩展下技能池,也让大家多个选择,就让我研究了一下HTTPrunner与Rest-assured,关于这两个工具,可能网上资料不多,就记录下学习结果,此篇是关于HTTPrunner的。
简介
HTTPrunner是一款面向HTTP(s)协议的通用测试框架,只需要维护一份yml/json脚本,就能实现自动化测试,性能测试,线上监控,持续集成等多种测试需求。
测试用例组织
测试用例集(testsuite):对应一个文件夹,包含单个或多个测试用例文件(yaml/json)
测试用例(testcase):对应一个 YAML/JSON 文件,包含单个或多个测试步骤
测试步骤(teststep):对应 YAML/JSON 文件中的一个 test,描述单次接口测试的全部内容,包括发起接口请求、解析响应结果、校验结果等
环境与安装
推荐环境:macOS/Linux/Windows+Python 3.6
安装方式:pip install httprunner
命令
hrun = httprunner = ate : 核心命令,用于运行用例
常用命令:
hrun test.json
hrun test.yml
hrun test.json --log-level debug
hrun test.json --html-report-name
har2case: 将HAR 格式转换为YAML/JSON格式的用例
常用命令:
har2case test.har
har2case test.har test.yml
locusts: 基于 Locust 实现性能测试
常用命令:
locusts -f test.json
测试流程
抓包
使用Fiddler抓包,获取.har文件
转换格式
har2case demo_car.har
har2case demo_car.har demo_car.yml
运行用例
hrun demo_car.json
查看报告
执行路径的 reports 目录下生成一份 HTML 格式的测试报告
调试优化
断言
可对Response的各项进行校验: status_code、header、contents…
比较方法:
eq:实际 = 期望
ne:实际 =! 期望
contains:实际包含期望
contained_by:期望包含实际
…
例如:
"validate":[
{"eq":["status_code",200]}
]
参数关联
提取前一个test的response中的参数,用于下一个test
方法:
参数提取(extract)
"extract":[{"token":"content.token"}]
参数引用($var)
"headers":{"token":"$token",
"Content-Type":"application/json"}
公共配置全局化
test中公共的部分可以放到全局配置模块(config)中
方法:提取两个test都存在的
"config":{
"headers":{
"User-Agent":"python-requests/2.18.4""Content-Type":"application/json"}
变量
变量可在config(全局)与test(局部)中使用
变量:
"variables": [
{"user_agent": "iOS/10.3"}
引用:
"headers": {
"user_agent": "$user_agent"}
函数
同级或其父级目录中创建一个 debugtalk.py
文件,然后在其中定义相关的函数
方法:函数调用${func($var)}
数据驱动
同一个用例跑不同的参数(用户)
方法:参数化(parameters)
"config":{"parameters":[{"user_id":[1001,1002,1003,1004]}]}
HOOK机制
请求前和请求后调用函数,相当于用例的前置与后置
功能:
用例层面(config)
步骤层面(test)
setup_hooks:自定义函数、
$request加工
teardown_hooks:
自定义函数、
$response加工、
$response修改
方法:
同级或其父级目录的 debugtalk.py 文件定义一个函数用于执行用例完成后,解析报告获取汇总结果,此处可以使用BeautifulSoap
在config增加teardown_hooks,调用所需的函数
总结与Rest-assured对比
个人感觉,HTTPrunner可以应用于一些简单的接口测试,或者是不会有大改动的接口的回归测试,这样也挺方便的,因为就只是导出har然后转换就可以执行。通常的接口测试还是建议使用Jmeter,关于Jmeter的使用可以参考《Jmeter性能测试流程》
参考资料:https://cn.httprunner.org/
网友评论