文章目录
一、参数化
参数化的核心:数据驱动(用数据驱动测试用例执行)
- 数据驱动:针对一个接口,只写一个测试方法。用一份测试数据文件,管理各个测试用例的测试数据。
- 如:登录接口,共 15 条测试用例。但,只需要一个 测试方法,对应 有 15 组数据的 json数据文件,进行测试。
二、回顾pytest参数化
2.1 加法原始案例 review_parameterize.py
# 待测 函数
def add(x, y):
return x + y
# 结合 pytest 定义测试类
class TestAddFunc(object):
# 定义测试方法
def test01_add(self):
res = add(10, 20) # 调用 待测函数,得实际结果
assert 30 == res # 断言
def test02_add(self):
res = add(100, 200)
assert 300 == res
def test03_add(self):
res = add(1000, 2000)
assert 3000 == res
结果:
wangfei@afei_Mac parameterizeReviewSH27 % pytest -s review_parameterize.py
review_parameterize.py ...
==================3 passed in 0.01s ==================================================
2.2 参数化实现(重点)
import pytest
# 待测 函数
def add(x, y):
return x + y
data = [(10, 20, 30), (100, 200, 300), (1000, 2000, 3000)]
# 结合 pytest 定义测试类
class TestAddFunc(object):
# 2个参数,第1个参数是一个字符串,对应每一组数据所对应的key;第2个参数是[(),(),()] 这种格式的数据,称作元祖列表
# @pytest.mark.parametrize("",[(),(),()])
@pytest.mark.parametrize("x, y, expect", data) # 参2 要求必须是 [(),(),()] 格式的数据
def test_add(self, x, y, expect): # 通用测试方法
res = add(x, y) # 调用 待测函数,得实际结果
assert expect == res # 断言
2.3 参数化实现-进阶
2.3.1 add_data.json
[
{"x": 10, "y": 20, "expect": 30},
{"x": 100, "y": 200, "expect": 300},
{"x": 1000, "y": 2000, "expect": 3000}
]
2.3.2 从json文件读取 add_data.py
import pytest
import json
# 待测 函数
def add(x, y):
return x + y
# 封装函数,读取json文件,将 [{},{},{}] 数据 转换为 [(),(),()] 格式的数据
def read_json_data(filename):
with open(filename, "r", encoding="utf8") as f:
json_data = json.load(f) # 读取json文件
data_list = []
for data in json_data:
val = data.values()
tmp = tuple(val) # 转换成元祖
data_list.append(tmp) # 把元祖追加到空列表当中
# 必须返回,不能在 for 内
return data_list # 返回 [(10, 20, 30), (100, 200, 300), (1000, 2000, 3000)]
# 结合 pytest 定义测试类
class TestAddFunc(object):
@pytest.mark.parametrize("x, y, expect", read_json_data("add_data.json")) # 参2 要求必须是 [(),(),()] 格式的数据
def test_add(self, x, y, expect): # 通用测试方法
res = add(x, y) # 调用 待测函数,得实际结果
assert expect == res # 断言
三、参数化步骤
- 将 测试数据,按 [{},{},{}] 格式 组织到 json文件中。
- 读取 json文件,将数据转换为 [(),(),()]
- 在通用测试方法上一行,添加 @pytest.mark.parameterize()
- 给 parameterize() 传参。参1:字符串类型,内容为 json文件中一组数据的 key。参2:[(),(),()]格式数据。
- 给 通用测试方法添加形参,与 parameterize() 参1 字符串的内容一致。
- 修改 通用测试方法 内部实现,使用形参。

3.1 接口参数化步骤
1、编写数据存储文件json
2、编写读取工具方法 read_json()
3、使用参数化组件进行引用parametrize
3.2 编写参数化文件
心得:
1、根据模块来新建json文件(1个模块1个json文件)
2、最外侧使用{},模块下几个接口,编写几个key,值为列表
3、列表值中,单接口有几组数据,就写几个[}.
4、每个{}中,组成格式:说明+要进行参数的参数+预期结果
// 有几个接口,写几个key,值为列表。 在api_register_login.py中有5个接口
// []中有几组数据,就有几个{}
1002

被折叠的 条评论
为什么被折叠?



