HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求
1、追求不重复造轮子 2、遵循 约定大于配置 的准则
3、追求投入产出比
1、继承 Requests 的全部特性
2、采用 YAML/JSON 的形式描述测试场景,保障测试用例描述的统一性和可维护性
3、借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑
4、支持完善的测试用例分层机制,充分实现测试用例的复用
5、测试前后支持完善的 hook 机制
6、响应结果支持丰富的校验机制
7、基于 HAR 实现接口录制和用例生成功能(har2case)
8、结合 Locust 框架,无需额外的工作即可实现分布式性能测试
9、执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
10、测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
11、极强的可扩展性,轻松实现二次开发和 Web 平台化
(1)运行环境:建议使用 Python 3.4 及以上版本
(2)安装方式:pip install httprunner
(3)安装校验:打开cmd,输入hrun -V命令进行校验,出现版本号则说明安装成功
为了简化测试用例的编写工作,可以通过抓包工具,如Fiddler、Charles 等进行接口录制,然后导出为标准通用的 HAR 格式(HTTP Archive),再通过 HttpRunner 将 HAR 格式的数据包转换为YAML/JSON格式的测试用例文件,对应的转换工具为:har2case。
下面以Fiddler为例,进行脚本录制和导出。
操作步骤:
选中需要转换的接口(可多选或全选),点击菜单中的Flie->Export Sessions->Selected session(选择HTTP Archive v1.1类型)保存至本地即可.
用Charles录制的方法大致相同,操作步骤为:选中需要转换的接口(可多选或全选),点击右键,在悬浮的菜单目录中点击【Export...】,格式选择HTTP Archive(.har)后保存即可
(1)将HAR转换为默认的JSON脚本,转换命令为:har2case filename.har
(2)将HAR转换为YAML脚本,转换命令为:har2case -2y filename.har
执行脚本的命令为:hrun filename.json 或hrun filename.yml
json格式和yaml格式:
可以直接复制报告地址,查看测试报告,报告内容很详尽。点击log按钮,可以查看具体某个接口的请求和返回数据。
创建项目命令:hrun --startproject 新项目名称
项目的文件组织结构如下:
以下为项目文件目录样例:
myobject
├── .env
├── data
│ ├── acount.csv
├── api
│ ├── demo_api.yml
├── debugtalk.py
├── reports
│ ├── 1550999327.html
├── testcases
│ ├──demo_testcase.yml
└── testsuites
│ ├──demo_testsuite.yml
(1).env:项目环境变量,用于存储敏感信息
编写格式:key=value
引用方式:在YAML/JSON脚本中,直接使用内置函数ENV引用,即${ENV(key)}
(2)debugtalk.py:项目中逻辑运算辅助函数
① 编写常见功能和业务相关的函数,使得测试用例中可以引用函数,实现一些动态的计算逻辑,如获取时间戳、生成随机数、处理签名等
② 编写hook函数,使得测试用例执行前后可以调用钩子函数,实现测试的准备和清理工作,如初始化某个请求参数、修改响应结果的某个值等
③引用方式:在 YAML/JSON 格式的测试用例中,通过${func()}的方式引用
(3)api:接口定义描述
(4)testcases:存放测试用例
(5)testsuites:存放测试用例集
(6)data:存放测试数据
(7)reports:存放测试报告
① 每个测试用例都是一个独立用例,原则上不依赖其他测试用例,不考虑执行顺序
② extract结果断言的字段有:status_code、content、text,json、cookies、elapsed、headers、reason、enconding、ok、url
若响应结果为json格式,可以通过content.xxx.0.id获取id(content为响应内容,xxx和id为字典的key,0为数组第一位。
若响应结果为xml/html,可通过正则表达式来获取结果参数。
③ 校验器有:eq(=)、lt(<)、le(<=)、gt(>)、ge(>=)、ne(!=)、str_eq、len_eq、len_gt、len_ge、len_lt、len_le、contains、contained_by、type_match、regex_match、startswith、endswith
测试用例集的testcases是1个数组,数组的每个值为1个测试用例,一般有name和testcase两个参数,除此之外还可以进行参数化数据驱动。
特别注意:yml文件需遵循严格的缩进,缩进多少格无所谓,只要保证同一层级的key对齐即可
注:在 parameters 中指定的参数名称必须与 CSV 文件中第一行的参数名称一致,顺序可以不一致,参数个数也可以不一致。
skip:无条件跳过
skipIf :条件成立,返回值为True时跳过
skipUnless: 条件不成立,返回值为False时跳过
并发执行可提高用例执行效率,一个进程执行一个yml文件,每个yml文件中的用例执行顺序还是一次执行的。修改httprunner源码的api.py文件中_run_suite函数。
httprunner输出的html测试报告:默认的模板文件的路劲为 (python安装路径)+Lib+site-packages+httprunner/templates/report/html/template.html(使用的是jinja2的格式),可在gen_report.py中的gen_html_report方法中找到:
修改template.html模板中以下代码,需在末尾处添加endif
执行测试用例时,添加--report-template 路径/template_fail.html,如下:其中路径更换为自己默认所在的路径哦,以下是服务器的路径:
hrun --report-template=/usr/local/python3/lib/python3.6/site-packages/httprunner/report/html/template_fail.html testcases/ --report-file=reports/${report_name}