之前使用HRUN1.0已经快一年来, 一直在关注开源社区的进展, 减年年初2.0就已经上线来, 由于担心稳定性差,文档又没有健全,迟迟没有升级;
最近看开发文档已经全部更新到2.0 决定将之前的项目进行优化; 首先学习下新的框架有哪些亮眼的地方;
项目中文使用文档: https://cn.httprunner.org/examples/testerhome-login/
1、环境搭建,具体可以参考文档,非常详细, 由于之前用过 我就直接升级就行了;
pip3 install -U HttpRunner
2、搭建测试脚手架(不用自己在像之前一样自己构建测试框架; 可以使用现成的框架结构,以下作者对测试用例的理解,是不是很有道理)
- 测试用例应该是完整且独立的,每条测试用例应该是都可以独立运行的;在 HttpRunner 中,每个
YAML/JSON
文件对应一条测试用例。 - 测试用例包含
测试脚本
和测试数据
两部分:测试用例 = 测试脚本 + 测试数据
测试脚本
重点是描述测试的业务功能逻辑
,包括预置条件、测试步骤、预期结果等,并且可以结合辅助函数(debugtalk.py)实现复杂的运算逻辑;可以将测试脚本
理解为编程语言中的类(class)
;测试数据
重点是对应测试的业务数据逻辑
,可以理解为类的实例化数据;测试数据
和测试脚本
分离后,就可以比较方便地实现数据驱动测试,通过对测试脚本传入一组数据,实现同一业务功能在不同数据逻辑下的测试验证。
hrun --startproject demo #会在当前路径下生成测试脚手架哦,IDE打开后是这样的
YAML/JSON
(必须):测试用例文件,存储接口测试相关信息debugtalk.py
(可选):存储项目中逻辑运算辅助函数- 该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录
- 该文件不存在时,运行测试的所在路径(
CWD
)将被视为项目工程根目录 - 测试用例文件中的相对路径(例如
.csv
)均需基于项目工程根目录 - 运行测试后,测试报告文件夹(
reports
)会生成在项目工程根目录
.env
(可选):存储项目环境变量,通常用于存储项目敏感信息.csv
(可选):项目数据文件,用于进行数据驱动reports
:默认生成测试报告的存储文件夹
3、批量生成自动化测试用例 har2case
和1.0使用基本没差, 利用抓包工具筛选出目标接口,批量导出 har格式, 然后转换成json 或 yml格式 稍加改造就是现成的测试用例
也支持使用Yapi 和 Swagger批量导出生成测试用例, 文档上是这么写的 我还没机会去试.
har2case x.har -2y #不写-2y 默认会生成json格式
4、用例优化之提取公共变量config
config层是用例中存放公共变量的地方,解决参数复用的问题;
存储公共变量使用变量名 variables, 可以放在用例集上 也可以放在某个具体的测试用例中;
后面接口调用直接 ${ } 会优先查找用例层面的variable 然后在找用例集层面的variable.
5、用例优化之 参数透传 extract
与之前一样 支持参数透传 即一条用例可能会调用多个接口, 接口调用前后存在依赖 后面的接口请求参数 需要前面接口的返回值(比如登陆的token)
接口一可以使用extract关键字来匹配返回值 路径. 或正则表达式
接口二想引用接口一的返回值 ${id}
6、用例优化之 测试数据参数化 parameters & debugtalk
独立参数参数化
关联参数参数化
引入csv文件进行参数化取值
引入热加载,用例参数化过程中实时去执行函数获取参数值
7、用例优化之 hook机制
支持用例集的hook和测试用例层面的hook
8、用例优化之 测试用例分层机制 -api -testcase
测试用例分层机制的核心是将接口定义、测试步骤、测试用例、测试场景进行分离,单独进行描述和维护,从而尽可能地减少自动化测试用例的维护成本。
api文件夹的作用:把重复的请求(请求token)抽离出去,引用时可以修改参数,用variable覆盖api参数,
希望用例可以回归本质,每一个用例都可以独立运行,做到数据解藕
除了把单个请求抽离出来 也可以把单个测试步骤抽离出来 被其它用例引用来解决数据节藕的问题
9、环境变量设置 .env
在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:
- 切换测试环境
- 切换测试配置
- 存储敏感数据(从信息安全的角度出发)
10、用例执行
hrun yourcasepath.yml --log-level debug
#默认情况下,HttpRunner 运行时的日志级别为INFO
,只会包含最基本的信息,包括用例名称、请求的URL和Method、响应结果的状态码、耗时和内容大小。
11、采用locusts执行用例的压力测试
$ locusts -f yourcasepath.yml