理念与同“UI 自动化测试框架”中的“测试步骤的数据驱动”雷同,接口中的测试步骤的数据驱动就是将接口的参数(比方 method、url、param 等)封装到 yaml 文件中治理。当测试步骤产生扭转,只须要批改 yaml 文件中的配置即可。
数据驱动就是数据的扭转从而驱动自动化测试的执行,最终引起测试后果的扭转。简略来说,就是参数化的利用。数据量小的测试用例能够应用代码的参数化来实现数据驱动,数据量大的状况下倡议应用一种结构化的文件(例如 yaml,json 等)来对数据进行存储,而后在测试用例中读取这些数据。
原理与后面章节“UI 自动化测试框架”中的“测试数据的数据驱动”大同小异。仍然应用 @pytest.mark.parametrize 装璜器来进行参数化,应用参数化来实现数据驱动。
通过参数化的形式,别离判断 id 为 2,3 的部门的 parentid 为 1:
import pytest
class TestDepartment:
department = Department()
@pytest.mark.parametrize("id", [2, 3])
def test_department_list(self, id):
r = self.department.list(id)
assert self.department.jsonpath(expr="$..parentid")[0] == 1
下面的代码首先应用 @pytest.mark.parametrize 装璜器,传递了两组数据,测试结果显示有两条测试用例被执行,而不是一条测试用例。也就是 pytest 会将两组测试数据主动生成两个对应的测试用例并执行,生成两条测试后果。
当测试数据量大的状况下,能够思考把数据存储在结构化的文件中。从文件中读取出代码中所须要格局的数据,传递到测试用例中执行。本次实战以 YAML 进行演示。YAML 以应用动静字段进行结构化,它以数据为核心,比 excel、csv、Json、XML 等更适宜做数据驱动。
将下面参数化的两组数据存储到 yaml 文件中,创立一个 data/department_list.yml 文件,代码如下:
-2
-3
下面的代码定义了一个 yaml 格局的数据文件 department_list.yml,文件中定义了一个列表,列表中有两个数据,最初生成的是这样的数据格式:[1,2]。将测试用例中参数化的数据革新成从 department_list.yml 文件中读取,代码如下:
class TestDepartment:
department = Department()
@pytest.mark.parametrize("id", \
yaml.safe_load(open("../data/department_list.yml")))
def test_department_list(self, id):
r = self.department.list(id)
assert self.department.jsonpath(expr="$..parentid")[0] == 1
下面的代码,只须要应用 yaml.safe_load()办法,读取 department_list.yml 文件中的数据,别离传入到用例 test_department_list() 办法中实现输出与后果的验证。
理论工作中,对于环境的切换和配置,为了便于保护,通常不会应用硬编码的模式实现。在“多环境下的接口测试”章节中曾经介绍了,如何将环境的切换作为一个可配置的选项。本章节会把这部分内容进行重构,应用数据驱动的形式实现多环境的配置。
依据“多环境下的接口测试”章节,将此章节中的环境配置局部改为数据驱动的模式
代码如下:
# 把 host 批改为 ip,并附加 host header
env={
"docker.testing-studio.com": {
"dev": "127.0.0.1",
"test": "1.1.1.2"
},
"default": "dev"
}
data["url"]=str(data["url"]).replace(
"docker.testing-studio.com",
env["docker.testing-studio.com"][env["default"]]
)
data["headers"]["Host"]="docker.testing-studio.com"
仍然以 yaml 为示例,将所有的环境配置信息放到 env.yml 文件中。如果怕出错,能够先应用 yaml.safe_dump(env)将 dict 格局的代码转换为 yaml。
如下所示,打印进去的,就是胜利转换 yaml 格局的配置信息:
def test_send(self):
env={
"docker.testing-studio.com": {
"dev": "127.0.0.1",
"test": "1.1.1.2"
},
"default": "dev"
}
yaml2 = yaml.safe_dump(env)
print("")
print(yaml2)
将打印进去的内容粘贴到 env.yml 文件中:env.yml
docker.testing-studio.com:
dev: "127.0.0.1"
test: "1.1.1.2"
level: 4
default:
"dev"
将环境筹备中的代码稍作批改,把 env 变量从一个典型 dict 改为,应用 yaml.safe_load 读取 env.yml:
# 把 host 批改为 ip,并附加 host header
env = yaml.safe_load(open("./env.yml"))
data["url"] = str(data["url"]).\
replace("docker.testing-studio.com",
env["docker.testing-studio.com"][env["default"]])
data["headers"]["Host"] = "docker.testing-studio.com"
如此一来,就能够实现应用数据驱动的形式,通过批改 env.yml 文件来间接批改配置信息。