pytest.mark.parametrize 参数化
pytest允许在多个级别启用测试参数化:
知识储备尚浅,目前知道的不多
参数化场景
只有测试数据和期望数据不一致,但是操作步骤是一样的测试用例可以用参数化
上代码实战:
import pytest
# def test_case01():
# assert 1+1 == 2
#
# def test_case02():
# assert 2+3 == 6
#
# def test_case03():
# assert 8+7 == 20
@pytest.mark.parametrize(‘inbody,expdata‘,[(‘1+1‘,2),(‘2+3‘,6),(‘8+7‘,20)])
def test_case04(inbody,expdata):
assert eval(inbody) == expdata
可以看到注释的代码 写的太冗余 鸡肋 ,而参数化
(煎蛋) ,节省时间代码
参数化的格式:
必须是系列表:
? 只有一个参数时: @pytest.mark.parametrize("inbody", ["xx", "xx1", "xx2"])
? 多个参数时:@pytest.mark.parametrize("inbody,inbody1", [("xx", "123"), ("xx1", "123"), ("xx2", "123")])
备注:虽然源码说需要list包含tuple,但我试了下,tuple包含list,list包含list也是可以的........
https://www.cnblogs.com/blog-123/p/14590493.html 数据驱动可以这里了解
当装饰器 @pytest.mark.parametrize 装饰测试类时,会将数据集合传递给类的所有测试用例方法
# 笛卡尔积,组合数据
data_1 = [1, 2, 3]
data_2 = [‘a‘, ‘b‘]
@pytest.mark.parametrize(‘a‘, data_1)
@pytest.mark.parametrize(‘b‘, data_2)
def test_parametrize_1(a, b):
print(f‘笛卡尔积 测试数据为 : {a},{b}‘)
参数化,标记数据
# 标记参数化
@pytest.mark.parametrize(‘inbody,expdata‘,[(‘1+1‘,2),(‘3+4‘,8),(‘6+6‘,13),
pytest.param(‘4+4‘,9,marks=pytest.mark.xfail),
pytest.param(‘6*6‘,67,marks=pytest.mark.xfail)])
def test_mark(inbody,expdata):
assert eval(inbody) == expdata
@pytest.mark.parametrize 参数化总结
原文:https://www.cnblogs.com/blog-123/p/14901095.html