脚手架创建与运行
$ httprunner startproject [project_name] #指定新的项目名称
例如:
$ httprunner startproject demo
运行:
$ hrun demo
基础概念
一、名称解释
teststep(测试步骤):每一个测试步骤应该就对应一个 API 的请求描述
testcase(测试用例):为了测试某个特定的功能逻辑而精心设计的,并且至少包含如下几点:
- 明确的测试目的(achieve a particular software testing objective)
- 明确的输入(inputs)
- 明确的运行环境(execution conditions)
- 明确的测试步骤描述(testing procedure)
- 明确的预期结果(expected results)
对应地,HttpRunner 的测试用例描述方式进行如下设计:
- 测试用例应该是完整且独立的,每条测试用例应该是都可以独立运行的;在 HttpRunner 中,每个 YAML/JSON 文件对应一条测试用例。
- 测试用例包含 测试脚本 和 测试数据 两部分:
- 测试用例 = 测试脚本 + 测试数据
- 测试脚本 重点是描述测试的 业务功能逻辑,包括预置条件、测试步骤、预期结果等,并且可以结合辅助函数(debugtalk.py)实现复杂的运算逻辑;可以将 测试脚本 理解为编程语言中的 类(class);
- 测试数据 重点是对应测试的 业务数据逻辑,可以理解为类的实例化数据;
- 测试数据 和 测试脚本 分离后,就可以比较方便地实现数据驱动测试,通过对测试脚本传入一组数据,实现同一业务功能在不同数据逻辑下的测试验证。
testsuite(测试用例集) :测试用例集 是 测试用例 的 无序 集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的。
如果确实存在先后依赖关系怎么办,例如登录功能和下单功能。正确的做法应该是,在下单测试用例的前置步骤中执行登录操作。
config:
name: "request methods testcase: reference testcase"
teststeps:
-
name: step1
testcase: testcases/login.yml
-
name: step2
api: api/add_cart.yml
-
name: step3
api: api/make_order.yml
测试场景: 测试用例的无序集合
- 接口
- 测试用例集
- 参数
- 变量
- 测试脚本(YAML/JSON)
- debugtalk.py
- 环境变量
二、 项目根目录
基于约定大于配置的原则,每个项目有且只有一个debugtalk.py,该文件拥有多种功能。
- 作为项目根路径的锚,测试用例中的相对路径(例如引用测试用例或CSV文件)都基于此根路径。
- 存储自定义的python函数,在测试用例中调用的函数均在此文件中定义
三、变量优先级
有几种不同类型的变量,优先级可能会令人困惑。 避免混淆的最好方法是使用不同的变量名。 但是,如果必须使用相同的变量名,则应该了解优先级策略。
testcase(测试用例)
config:
name: xxx
variables: # 配置变量(config variables)
varA: "configA"
varB: "configB"
varC: "configC"
parameters: # 参数变量(parameter variables)
varA: ["paramA1"]
varB: ["paramB1"]
teststeps:
-
name: step 1
variables: # 测试步骤变量(step variables)
varA: "step1A"
request:
url: /$varA/$varB/$varC # varA="step1A", varB="paramB1", varC="configC"
method: GET
extract: # 提取变量(extract variables)
varA: body.data.A # 假设 varA="extractVarA"
varB: body.data.B # 假设 varB="extractVarB"
-
name: step 2
varialbes:
varA: "step2A"
request:
url: /$varA/$varB/$varC # varA="step2A", varB="extractVarB", varC="configC"
method: GET
变量优先级:
- 测试步骤变量>提取变量>参数变量>配置变量
step variables > extract variables > paramrters variables> config variables
testsuite(测试套件)
config:
name: xxx
variables: # testsuite config variables
varA: "configA"
varB: "configB"
varC: "configC"
testcases:
-
name: case 1
variables: # testcase variables
varA: "case1A"
testcase: /path/to/testcase1
export: ["varA", "varB"] # export variables
-
name: case 2
varialbes: # testcase variables
varA: "case2A"
testcase: /path/to/testcase2
在测试套件中,变量优先级如下:
测试用例变量 >输出用例变量>测试套件变量> 被引用用例配置变量
testcase variables > export variables > testsuite config variables > referenced testcase config variables
四、项目结构
文件类型说明
- debugtalk.py(可选):存储项目中逻辑运算辅助函数
- 该文件存在时,将作为项目根目录定位标记&#