名词解释
teststep测试步骤
测试用例是测试步骤的有序集合
接口测试来说,每一个测试步骤,对应一个 API 的请求描述
testcase测试用例
一条测试用例(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项目配置
基于约定大于配置的原则,每个项目有且只有一个debugtalk.py,该文件拥有多种功能。
作为项目根路径的锚,测试用例中的相对路径(例如使用测试用例或CSV文件)都基于此根路径。
存储自定义的python函数,在测试用例中调用的函数均在此文件中定义
变量作用域和优先级
变量作用域
config测试用例全局配置
包含base_url,verify,variables,export
teststeps测试步骤列表
每个步骤都对应一个API请求或另一个用例的使用
variables/extract/validate/hooks支持创建及其复杂的测试用例。
测试步骤的变量空间会继承或覆盖config中定义的内容
若某变量在config中定义了,在某test中没有定义,则该test会继承该变量
若某变量在config和某test中都定义了,则该test中使用自己定义的变量值
各个测试步骤的变量空间相互独立,互不影响
如需在多个测试步骤中传递参数值,则需要使用extract关键字,只能从前往后传递
测试用例的优先级
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, 例如:step 2, varA="step2A"
parameter variables > config variables, 例如:step 1, varB="paramB1"
extracted variables > parameter variables > config variables, 例如:step 2, varB="extractVarB"
config variables的优先级最低,例如:step 1/2, varC="configC"
测试套件的优先级
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)