前言
继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
采用 YAML/JSON 的形式描述测试场景,保障测试用例描述的统一性和可维护性
借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑
支持完善的测试用例分层机制,充分实现测试用例的复用。
一、Httprunner
1.简介
-
它是面向http协议的测试框架,只需要去维护啊一份yaml/json文件就可以使用自动化测试,结合locust性能测试,线上性能监控,持续集成等多种需求
-
它有两个版本:2.x和3.x
2.设计思想和理念
- Go语言编写
- 支持跨平台
- 支持多种协议的代理
- web管理端
3.运行环境
- HttpRunner 是一个基于 Python 开发的测试框架,可以运行在macOS、Linux、Windows 系统平台上。
- Python 版本:HttpRunner 支持 Python 3.4 及以上的所有版本,并使用 Travis-CI 进行了持续集成测试,测试覆盖的版本包括2.7/3.4/3.5/3.6/3.7。虽然 HttpRunner 暂时保留了对 Python 2.7 的兼容支持,但强烈建议使用 Python 3.4 及以上版本。
- 操作系统:推荐使用 macOS/Linux。
4.Httprunner环境搭建
- 支持python2.7、推荐3.7
- 直接安装Httprunner
pip install httprunner
pip install har2case
- 验证环境 出现下图版本号就恭喜您成功
hrun -V
har2case -V
5.运行环境
- httprunner startproject demo 创建工程
YAML/JSON(必须):测试用例文件,存储接口测试相关信息
debugtalk.py(可选):存储项目中逻辑运算辅助函数,该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录,该文件不存在时,运行测试的所在路径(CWD)将被视为项目工程根目录
.env(可选):存储项目环境变量,通常用于存储项目敏感信息
.csv(可选):项目数据文件,用于进行数据驱动
reports:默认生成测试报告的存储文件夹
6.基本语法
1、k:(空格)v:表示一对键值对(空格必须有),不支持table键,一般手动空格
2、以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
3、属性和值大小写敏感
4、# 表示注释
5、null是用~表示
6、支持的数据结构:
对象:键值对的集合
数组:一组按次序排列的值
纯量(scalars):单个的、不可再分的值
字符串、布尔值、整数、浮点数、时间、日期、null
七.例子
-
手写yaml较为繁琐与麻烦,这里推荐采用抓包方式自动生成yaml
-
推荐使用 Fiddler Everywhere 抓包软件 [点击下载:微信搜索【小白看Java】关注发送0001获取提取码](链接: https://pan.baidu.com/s/1e0eauQ_30nkatqdVVNtvpg)
-
Postman调用你要测试的接口(如下:)
-
在Fiddler Everywhere 将请求包抓取下来,并放在之前创建的项目里面
-
执行Har2case 文件.har -2y 将抓的包转换为yaml文件
八.配置解释
-
config参数说明,(注:output用法(也可以用export代替)):
-
实际演示
validate 可以支持的校验方式
comparator | 缩写 | 功能 |
---|---|---|
equal | “eq”, “equals”, “equal” | 相等 |
less_than | “lt”, “less_than” | 小于 |
less_or_equals | “le”, “less_or_equals” | 小于或等于 |
greater_than | “gt”, “greater_than” | 大于 |
greater_or_equals | “ge”, “greater_or_equals” | 大于或等于 |
not_equal | “ne”, “not_equal” | 不等于 |
string_equals | “str_eq”, “string_equals” | 转字符串相等 |
length_equal | “len_eq”, “length_equal” | 长度相等 |
length_greater_than | “len_gt”,“length_greater_than” | 长度大于 |
length_greater_or_equals | “len_ge”,“length_greater_or_equals” | 长度大于或等于 |
length_less_than | “len_lt”, “length_less_than” | 长度小于 |
length_less_or_equals | "“len_le”, “length_less_or_equals” | 长度小于或等于 |
contains | check_value 包含 expect_value | |
contained_by | expect_value 包含check_value | |
type_match | type类型匹配 | |
regex_match | 正则匹配re.match(expect_value, check_value) | |
startswith | 字符串以xx开头 | |
endswith | 字符串以xx结尾 |