HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等 网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型。简单易用,功能强 大,具有丰富的插件化机制和高度的可扩展能力。
1.HttpRunner 的特征:
2.安装
pip install httprunner # 截止到2023年5月,最新版本为4.3.0
在 httprunner 中,测试用例组织主要基于三个概念:
config:
name: 案例名称
base_url: http://#url
verify: False
export: [myCookie,courseId] #导出用例变量
variables: #全局变量 优先级大于parameters
parameters: #参数化
teststeps:
- name: 获取登录cookie #步骤名
testcase: login-5.yaml #步骤路径
- name: 新增课程API
validate: #断言
- check: $retcode
assert: equals
expect: 0
msg: assert response retcode
extract: #响应结果提取
retcode: body.retcode
courseId: body.id
request: #请求
method: POST
url: /api/mgr/sq_mgr/
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
}
cookies:#cookie缓存,#如果是token 就放在headers里
sessionid: $myCookie
body: #请求参数
action: add_course
data: '{"name":"初中英语99992","desc":"","display_idx":1}'
- 1.全局变量
config:
name: 用户登录
variables: #全局变量
username: auto
password: sdfsdfsdf
teststeps:
- name: 登录
request:
data:
username: $username
password: $password
2- 步骤变量
teststeps:
- name: 登录
variables:#步骤变量
username: auto
password: sdfsdfsdf
3.响应结果提取
teststeps:
- name: 登录
extract: #响应结果提取
retcode: body.retcode
cookie: cookies.sessionid
4.导出用例变量
就是把A测试用例执行后产生的结果,供B测试用例使用
config:
name: 用户登录
export: [cookie] #导出用例变量
teststeps:
- name: 登录
extract:
retcode: body.retcode
cookie: cookies.sessionid
5.变量的高级应用( debugtalk.py)
在项目的根目录中创建一个 debugtalk.py(每个项目有且只有一个)。存储自定义的 python 函数,在测试用例中调用的函数均在此文件中定义
#第一步:定义函数
def login_variables():
return {'userName': 'auto', 'passWord': 'sdfsdfsdf','retCode': 0}
#第二步:全局变量替换
config:
name: 用户登录
variables: ${login_variables()}
6…env文件
.env 文件用于定义环境变量。在项目根目录下创建 .env 文件(文件名就是 .env 不要忘记点),在自动化测试中,有时需要借助环境变量实现某些 特定的目的,常见的场景包括:
第一步:定义环境变量(在 .env 中)
url=http://
第二步:使用环境变量
config:
name: 用户登录-7全局变量
base_url: ${ENV(url)}
7.初始化与清除楚机制
在hr中,实现数据初始化与清除机制的方式是利用 hook 机制,在请求前和请求后 调用钩子函数。目前HR只支持步骤层面的hook,用例层面的未实现。
teststeps:
-
name: 用户名密码登录
setup_hooks:
- ${hook_setup()}
teardown_hooks:
- ${hook_teardown()}
8.参数化
需要 使用 parameters 关键字,定义参数名称并指定数据源取值方式
config:
name: 用户登录
base_url: http://
parameters: #直接参数
username: [ sq001,sq002 ]
password: [ sdfsdfsdf,sdfsdfsdf ]
config:
name: 用户登录
base_url: http://
parameters: #关联参数
username-password:
- [ sq001,sdfsdfsdf ]
- [ sq002,sdfsdfsdf ]
# debugtalk.py
def get_login_data():
return [
{'username': 'sq001', 'password': 'sdfsdfsdf'},
{'username': 'sq002', 'password': 'sdfsdfsdf'},
{'username': 'sq003', 'password': 'sdfsdfsdf'},
]
config:
name: 用户登录
base_url: http://124.223.33.41:7081
parameters:
username-password: ${get_login_data()}
username,password
sq001,sdfsdfsdf
sq002,sdfsdfsdf
config:
name: 用户登录-1.1 直接指定参数列表、2.1 关联参数的使用、2.2 引用自定义函
数
base_url: http:
verify: False
parameters:
username-password: ${P(data/account.csv)}