Pytest知识整合小记(三、参数化测试)
一、参数化语法
之前在介绍Unittest的时候,讲过Unittest用的ddt库进行参数化运行,现pytest不需要额外的库,用装饰器即可。
@pytest.mark.parametrize("CarNumber,Type", [
pytest.param(BlackCarNumber,1,id='blacklist'),#黑名单
pytest.param(GreyCarNumber,2,id='greylist'),#灰名单
pytest.param(WhiteCarNumber,3,id='whitelist'),#白名单
]
)
其中CarNumber,Type为对应变量,下面是对应的参数值,id为每个用例的标识,该用例共计执行三次。
二、参数组合
@pytest.mark.parametrize("a", [0, 1])
@pytest.mark.parametrize("b", [2, 3])
def test_1(a, b):
print("测试数据组合:a->%s, b->%s" % (a, b))
三、给类加上参数化装饰器
在类上加对应参数化装饰器后,整个类的方法都会被该数据集传递。
四、标记单例后进行参数化
@pytest.mark.parametrize("test_input,expected", [
("3+5", 8),
("2+4", 6),
pytest.param("6 * 9", 42, marks=pytest.mark.xfail),
])
def test_eval(test_input, expected):
print("-------开始用例------")
assert eval(test_input) == expected
最后填坑批注:
1.在参数化的时候,整个用例都会提前先运行参数化对应的值,进行测试准备,所以在进行测试结果传递的用例的时候,在参数可能有变化的用例的时候,容易取值出错,经过总结出以下办法:
2.写中间缓存,把上一个用例的测试结果缓存起来(mysql、或者excel、json等),在下一个用例执行的时候去获取缓存数据。
3.定义全局变量(不建议)
4.函数之间的参数传递,方法继承等。
5.用内置cache.

浙公网安备 33010602011771号