httprunner框架使用
1、测试用例结构:
(1)一个JSON/YAML文件对应一个测试用例
(2)每个测试用例为一个list of dict结构,其中可能包含全局配置项(config)和若干个测试步骤(test)
(3)config 为全局配置项,作用域为整个测试用例
(4)test 对应单个测试步骤,作用域仅限于本身
2、在测试步骤中提取参数用extract,参数引用用$var
在测试步骤(test)中,若需要从响应结果中提取参数,则可使用 extract 关键字。extract 的列表中可指定一个或多个需要提取的参数。
在提取参数时,当 HTTP 的请求响应结果为 JSON 格式,则可以采用.运算符的方式,逐级往下获取到参数值;响应结果的整体内容引用方式为 content 或者 body。
在测试用例中传递参数用exctract关键字,只能从前往后传递
3、变量申明(variables)跟引用($var)。config跟test中均可以用variables定义变量,用$+变量名称引用,其中config为全局变量,test中为本用例变量
4、httprunner支持热加载的插件机制debugtalk.py,在测试用例文件的同级或上级目录中创建debugtalk.py,在其中定义相关变量跟函数,
创建完成后,引用函数的方式为${func($var)}
5、httprunner的主要文件格式:
(1)YAML/JSONL:测试用例文件,存储接口测试相关信息
(2)debugtalk.py:存储相关函数
- 该文件存在时,将作为项目根目录定位标记,其所在目录即被视为项目工程根目录
- 该文件不存在时,运行测试的所在路径(
CWD)将被视为项目工程根目录 - 测试用例文件中的相对路径(例如
.csv)均需基于项目工程根目录 - 运行测试后,测试报告文件夹(
reports)会生成在项目工程根目
(3).env(可选):存储项目环境变量,通常用于存储项目敏感信息
(4).csv(可选):项目数据文件,用于进行数据驱动
(5)reports:默认生成测试报告的存储文件夹
6、测试用例结构:

#对应的json结构,test对应单个测试步骤(teststep)
[
{
"config": {...}
},
{
"test": {...}
},
{
"test": {...}
}
]
7、extract:
(1)响应结果为json:采用 . 运算符
(2)响应结果为text/html :采用正则表达式
8、validate:结果的校验项,支持两种格式:
{"comparator_name": [check_item, expect_value]}{"check": check_item, "comparator": comparator_name, "expect": expect_value}
9、谷歌定义的yaml格式的文件都必须在冒号后加空格
10、逻辑关系:

(1)接口定义:API的描述应该尽量全面,方便API的独立测试
API的组成:name、variables、request、base_url、validate 等,定义完成后用 hrun get_headers.yml对单个接口进行调试
name: get headers
base_url: http://httpbin.org
variables:
expected_status_code: 200
request:
url: /headers
method: GET
validate:
- eq: ["status_code", $expected_status_code]
- eq: [content.headers.Host, "httpbin.org"]
(2)测试用例
①引用接口定义:在teststep步骤中选用API字段引用接口定义,引用方式为API文件的路径
②引用测试用例:在teststep中使用testcase引用测试用例
(3)测试用例集:测试用例为无序的集合,不存在依赖关系,若存在,在测试用例中完成
参数化场景使用parameters完成,覆盖variables 的参数,驱动测试用例的运行
11、httprunner推荐的文件结构
debugtalk.py放置在项目根目录下,假设为PRJ_ROOT_DIR.env放置在项目根目录下,路径为PRJ_ROOT_DIR/.env- 接口定义(API)放置在
PRJ_ROOT_DIR/api/目录下 - 测试用例(testcase)放置在
PRJ_ROOT_DIR/testcases/目录下 - 测试用例集(testsuite)文件必须放置在
PRJ_ROOT_DIR/testsuites/目录下 - data 文件夹:存储参数化文件,或者项目依赖的文件,路径为
PRJ_ROOT_DIR/data/ - reports 文件夹:存储 HTML 测试报告,生成路径为
PRJ_ROOT_DIR/reports/
12、快速创建新项目:
hrun --startproject demo
·13、参数机制在 测试用例集中实现
14、数据源的3种方式:
- 在 YAML/JSON 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
- 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
- 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式
- 实现方式
-
config: name: "demo" testcases: testcase1_name: testcase: /path/to/testcase1 parameters: user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"] user_id: ${P(user_id.csv)} username-password: ${get_account(10)}
15、笛卡尔组合的结果数量为各个参数数量的乘积
16、HttpRunner 通过复用 Locust,可以在无需对 YAML/JSON 进行任何修改的情况下,直接运行性能测试。
17、参数化使用parameters,采用笛卡尔组合结果对variables中定义的参数进行覆盖
18、通过times重复执行用例
19、对参数的加解密处理在tearsdown_hoook中处理
浙公网安备 33010602011771号