httprunner简介
httprunner是一款面向HTTP/HTTPS协议的通用测试框架,只需要编写维护一份yaml/json脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
特性
- 继承request的全部特性,轻松实现HTTP(S)的各种测试需求
- 测试用例与代码分离,采用yaml/json的形式描述测试场景,保障测试用例具备可维护性
- 测试用例支持分层机制,充分实现测试用例的复用
- 测试用例支持参数化和数据驱动机制
- 使用skip机制实现对测试用例的分组执行控制
- 测试请求支持完善的hook机制
- 支持热加载机制,在文本测试用例中轻松实现负载的动态计算逻辑
- 基于HAR实现接口录制和用例生成功能
- 具有可拓展性,便于拓展实现WEB平台化(httprunnerManager)
下载安装
使用pip3安装httprunner
pip3 install httprunner==1.5.8
安装完成后,输入hrun -V
查看是否安装成功,如果显示 bash: hrun: command not found...
则需要添加软链接。
- 使用find命令查找hrun安装的目录:
find / -name hrun
- 使用ln -s 添加软链接:
ln -s /root/python36/bin/hrun /usr/bin/hrun
用例设计
httprunner的测试用例支持两种文件格式:YAML/JSON,以YAML为例。
比如:淘宝查询电话号码归属地(可用)https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=手机号
更多练习的接口可以参考
test.yaml
- config:
name: 查询号码归属地
request:
base_url: https://tcc.taobao.com/cc/json
- test:
name: 接口正常访问
request:
url: /mobile_tel_segment.htm
method: GET
json:
tel: '13330232962'
validate:
- eq: [status_code,200]
运行用例
打开cmd命令行,进入测试用例yaml文件所在目录。我的D:\python_work\study_hrun\day_01
cd D:\python_work\study_hrun\day_01
hrun test.yaml
查看测试报告
运行结束后,在当前运行的目录下会生成一个 reports 目录,里面会生成 html
的测试报告,浏觅器打开 html 报告如下:
点开log可以查看请求的request和返回的response详情
测试用例结构
在httprunner中,测试用例组织只要基于三个概念:
- 测试用例集:对应一个文件夹,包含单个或多个测试用例(yaml/json)文件
- 测试用例:对应一个yaml/json文件,包干单个或多个测试步骤
- 测试步骤:对应yaml/json文件中一个test,描述单词接口测试的全部内容,包括发送接口请求、解析响应结果、校验结果等。
对于单个YAML/JSON文件来说,数据存储结构为list of dict,其中可能包含一个全局配置项(config)和若干个测试步骤(test)。 - config:作为整个测试用例的全局配置项
- test:对应单个测试步骤,测试用例存在顺序关系,运行时将从前往后依次运行各个测试步骤。
变量空间作用域
在测试用例内部,httprunner划分了两层变量空间作用域。
- config:作为整个测试用例的全局配置项,作用域在这个测试用例
- test:测试步骤的变量空间,会继承或覆盖config中定义的内容(若某变量在config中定义了,在某test中没有定义,则该test会继承该变量;若某变量在config和某test中都定义了,则会覆盖test会调用自己定义的变量值)
- 各个步骤(test)的变量空间相互独立,互不影响
- 如果需要在多个测试步骤(test)中传递参数值,则需要使用extract关键字,并且只能从前往后传递
相关配置说明
- config: 整个测试用例集的全局配置项
name:用例集的名称,在测试报告中将作为标题。(必填)
variables:定义的全局变量,作用域为整个用例。
parameters:全局参数,用于实现数据化驱动,作用域为整个用例
request:request的公共参数,作用域为整个用例,常用的参数包括base_url和headers。base_url-->测试用例请求的公共host,指定后test中的url只描述path部分、headers-->request中headers的公共参数、output-->整个用例输出的参数列表,可输出的参数包括公共的variables和extract的参数,在log-level为debug模式下。
- test:对应的单个测试用例
name:测试用例名称,在测试报告中作为测试步骤的名称(必填).
request: 这个test具体发送的 http 请求的各种信息(必填).
url-->请求路径,完整的请求路径为url+base_url(如果config中request定义了base_url);
method-->请求方式;
json-->请求参数;
headers-->请求头部。
variables:测试步骤中定义的变量,作用域为当前测试步骤
extract:从当前http请求爱的响应结果中提取参数,并保存到参数变量中。比如token,后面介绍
validate:测试用例中定义的结果校验项,作用域是当前测试用例,用于校验结果
setup_hooks:在http请求发送前执行hook函数,主要用于准备工作
teardown_hooks:在http请求发送后执行hook函数,主要用于测试后的清理工作