前言
- HttpRunner v3.x 支持3种用例格式:pytest、YAML和JSON;pytest、YAML和JSON格式的测试用例完全等价,可使用Yaml和Json用例生成pytest用例。
基础概念
- 测试用例集(testsuite): 是测试用例的无序集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的。如果确实存在先后依赖关系怎么办,例如登录功能和下单功能。正确的做法应该是,在下单测试用例的前置步骤中执行登录操作。对应一个YAML/JSON/Python文件,包含单个或多个测试用例文件。
- 测试用例(testcase): 测试用例是测试步骤的有序集合;应该是为了测试某个特定的功能逻辑而精心设计的,并且至少包含如下几点:
- 明确的测试目的(achieve a particular software testing objective)
- 明确的输入(inputs)
- 明确的运行环境(execution conditions)
- 明确的测试步骤描述(testing procedure)
- 明确的预期结果(expected results)
- 测试步骤(teststep): 测试用例是测试步骤的有序集合,而对于接口测试来说,每一个测试步骤应该就对应一个 API 的请求描述。对应YAML/JSON/Python中 teststeps下的一个节点,描述单次接口测试的全部内容,包括发起接口请求、解析响应结果、检验结果等。
config
- 每个测试用例都必须有config部分,可以配置用例。
属性名称 | 是否必填 | 作用 |
name | 必填 | 指定测试用例名称。这将显示在执行日志和测试报告中。 |
base_url | 可选 | 如果base_url指定,则 teststep 中的 url 可以设置相对路径部分 |
verify | 可选 | https请求时,是否校验证书,默认True,忽略证书校验可以设置为False |
variables | 可选 | 定义的全局变量,作用域为整个用例。每个测试步骤都可以引用config variables。也就是说,step variables 优先级高于 config variables. |
parameters | 可选 | 全局参数,用于实现数据化驱动,作用域为整个用例。 |
export | 可选 | 指定输出的测试用例变量。将每个测试用例看作一个黑盒,config variables是输入变量,config export是输出变量。当一个测试用例在另一个测试用例的步骤中被引用时,config export将被提取并在随后的测试步骤中使用。 |
config: name: login variables: # 配置变量(config variables) varA: "configA" varB: "configB" varC: "configC" parameters: # 参数变量(parameter variables) varA: ["paramA1"] varB: ["paramB1"] base_url: "https://postman-echo.com" verify: False export: ["foo3"] teststeps: - name: step 1 ... - name: step 2 ...
teststeps
- 每个测试用例都有1个或多个测试步骤(List[step]),每个测试步骤对应一个API请求或其他用例的引用
属性名称 | 是否必填 | 作用 |
name | 必填 | 指定测试步骤名称 |
request | 必填 | 指定测试步骤变量,参数引用变量"$变量名" |
variables | 可选 | 指定测试步骤变量,参数引用变量"$变量名" |
extract | 可选 | 提取返回结果 |
export | 可选 | 导出的测试用例会话变量,设为全局变量 |
validate | 可选 | 校验返回结果 |
hooks | 可选 | 请求钩子 |
testcase | 可选 | 指定引用的测试用例 |
teststeps: - name: get with params variables: foo1: bar11 foo2: bar21 sum_v: "${sum_two(1, 2)}" request: method: GET url: /get params: foo1: $foo1 foo2: $foo2 sum_v: $sum_v headers: User-Agent: HttpRunner/${get_httprunner_version()} extract: foo3: "body.args.foo2" validate: - eq: ["status_code", 200] - eq: ["body.args.foo1", "bar11"] - eq: ["body.args.sum_v", "3"] - eq: ["body.args.foo2", "bar21"] export: - foo3 testcase: testcases/demo_testcase_request.yml