全文大部分引用:https://docs.httprunner.org
httprunner2.X 和 3.X的区别:https://www.cnblogs.com/yoyoketang/p/15009395.html
1、安装
- 安装:pip3 install httprunner
- 版本:httprunner -V # hrun -V
- 帮助:httprunner -h
注: pip安装时报错,及解决方法
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.
解决:pip --default-timeout=100 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
2、命令
- httprunner: 主命令,用于所有功能。即可替换hrun / hmake / har2case使用
- hrun =httprunner run,用于运行 YAML/JSON/pytest 测试用例
- hmake =httprunner make,用于将 YAML/JSON 测试用例转换为 pytest 文件
- har2case =httprunner har2case,用于将 HAR 转换为 YAML/JSON 测试用例
- locusts: 用于运行locust 的负载测试
3、创建项目
- 帮助:httprunner startproject -h
- 创建新项目:httprunner startproject demo # 项目名称唯一 demo
- 项目树:tree demo -a # brew install tree
demo
├── .env
├── .gitignore #版本管理
├── debugtalk.py
├── har
├── reports # 存储HTML报告
└── testcases # 测试用例
├── demo_testcase_ref.yml # 创建项目时,自动创建的可执行用例
└── demo_testcase_request.yml
约定大于配置
1) debugtalk.py 存储项目其他逻辑函数
-
每一个项目只有一个debugtalk.py。
-
存放自定义的python函数。testcase中调用的函数均在文件中定义。
如处理签名、时间戳、随机数、hook函数等
-
作为项目的根路径锚点。testcase中的相对路径,基于该路径。
-
该文件不存在时,运行测试的所在路径为项目工程根目录。
2).env 存储项目环境变量
- 从第一行开始编辑,结尾不要有空行。
- 格式为key=value,value不用引号包裹。
httprunner 2.X 项目还可有目录(3.X 弱化API层,去掉分层机制)
3)data 存储数据
4)api 存储api接口,最小单元接口测试
5)testsuites 存储测试场景
4、测试用例
4.1 用例属性
每个测试用例都是HttpRunner的子类,必要属性:
-
config:测试用例配置
- name:用例名称,必选,显示在执行日志及报告中
- base_url:请求地址,可选,如指定base_url,则teststep中只能写相对路径
- verfiy:是否验证服务器TLS证书,可选,True/False。 可产生SSLError错误。
- variables:测试用例公共变量,用例输入,可选
- export:导出用户会话变量,用例输出,可选
-
teststeps:操作配置
variables:测试步骤定义的变量
extract:从当前Http请求响应结果中提取参数,并保存到参数变量中
validate:测试用例中结果校验
times:重复执行用例次数
setup_hooks:在Http请求发送前执行hook函数,前置工作
teardown_hooks:在http请求发送后执行hook函数,用于测试后清理
request:向API发出请求,对响应验证或提取- name:测试步骤名称,显示在执行日志及报告中
- variables:测试步骤变量
- method:请求路径和方法,如指定base_url,则teststep中只能写相对路径,参见requests.request
- requests.request [https://docs.python-requests.org/en/master/api/#requests.request](https://docs.python-requests.org/en/master/api/#requests.request)
-
params:url指定查询的字符串,参见requests.request
-
headers:HTTP请求头,参见requests.request
-
cookies:HTTP请求cookie,参见requests.request
-
data:HTTP请求正文,参见requests.request
-
json:JSON中指定的HTTP请求,参见requests.request
-
jmespath:使用jmespath提取 JSON 响应正文。
- 格式:with_jmespath(jmes_path:文本,var_name:文本)
- 参照:jmespath表达式 https://jmespath.org/tutorial.html
- var_name:存储提取变量名称,供后续使用 -
assert_xxx:使用jmespath提取 JSON 响应正文并使用预期值进行验证。
- 格式:assert_XXX(jmes_path: Text, expected_value: Any, message: Text = “”)
- expected_value:可使用指定的预期值、变量或函数引用
- Text:只是断言错误原因,可选
RunTestCase: 一个测试步骤中引用另一个测试用例 -
name:测试步骤名称,显示在执行日志及报告中
-
variables:测试步骤变量
-
call:指定引用的测试用例类
-
export:指定要从引用的测试用例导出的会话变量名称。
4.2 其他语法
1)变量:在variables中定义,引用格式为 $ varA
variables:
varA: “configA”
2)env变量:在.env中文件定义,key=value(没有引号),引用格式为 E N V ( k e y ) < b r / > 3 )函数:在 d e b u g t a l k . p y 中实现,引用返回值格式为 {ENV(key)}<br />3)函数:在debugtalk.py中实现,引用返回值格式为 ENV(key)<