pytest.mark.parametrize 详解

时间:2021-02-04 12:03:09   收藏:0   阅读:0

pytest允许在多个级别启用测试参数化:

源码分析

def parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None): 

argnames

源码解析:a comma-separated string denoting one or more argument names, or a list/tuple of argument strings.

含义:参数名字

格式:字符串"arg1,arg2,arg3"【需要用逗号分隔】

备注:源码中写了可以是参数字符串的list或者tuple,但博主实操过是不行的,不知道是不是写的有问题

@pytest.mark.parametrize(["name", "pwd"], [("yy1", "123"), ("yy2", "123")])  # 错的
@pytest.mark.parametrize(("name", "pwd"), [("yy1", "123"), ("yy2", "123")])  # 错的
@pytest.mark.parametrize("name,pwd", [("yy1", "123"), ("yy2", "123")])

argvalues

源码解析:

含义:参数值列表

格式:必须是列表,如:[ val1,val2,val3 ]

如果只有一个参数,里面则是值的列表如:@pytest.mark.parametrize("username", ["yy", "yy2", "yy3"])

如果有多个参数例,则需要用元组来存放值,一个元组对应一组参数的值,如:@pytest.mark.parametrize("name,pwd", [("yy1", "123"), ("yy2", "123"), ("yy3", "123")])

备注:虽然源码说需要list包含tuple,但我试了下,tuple包含list,list包含list也是可以的........ 

重点

当装饰器 @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}‘)

 

执行结果

技术图片

重点知识

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!