Pytest 参数化

通常我们需要一条用例运行多条不同的数据,如何实现呢?Pytest框架使用装饰器@pytest.mark.parametrize()实现参数化。

1. @pytest.mark.parametrize("name,tel",para1) 修饰类-作用域整个类,类中所有用例都要带参.否则报错

file

2. @pytest.mark.parametrize("name,tel",para1) 修饰函数

2.1 单参:

sex = [0,1]
para1 = {
    (name[0],tel[0]),
    (name[1],tel[1]),
    (name[2],tel[2])
}
class Test_Demo():
    @pytest.mark.parametrize("sex", sex)
    def test_demo3(self,sex):
        print('user sex is {}'.format(sex))

file

2.2 多参:

#一个参数对应一个数据,个数需一致
@pytest.mark.parametrize("name,tel", para1)
def test_demo1(self,name,tel):
    print('name is {} ans tel is {}'.format(name,tel))

file

#一个参数对应一组数据
@pytest.mark.parametrize("info", para1)
def test_demo2(self,info):
    print('user info is {}'.format(info))

file

3 参数组合: 用例个数为参数做笛卡尔积

@pytest.mark.parametrize("name", name)
@pytest.mark.parametrize("sex", sex)
def test_demo4(self, name, sex):
    print('name is {} ans sex is {}'.format(name, sex))

file

4 数据类型可为元祖,列表,字典:

para2 = [
    {'name':name[1],'tel':tel[1]},
    {'name':name[2],'tel':tel[2]}
]
para1 = [
    [1,2,3],
    [2,2,3],
]
para3 = [
    (1,2,3)
]
@pytest.mark.parametrize("usr", para2)
def test_demo4(self, usr):
   print('usr is {}'.format(usr))

file

5.自定义输出参数格式,增加可读性-装饰器带ids参数

ids = ['name is {} ans tel is {}'.format(name, tel) for name, tel in para1]
@pytest.mark.parametrize("name,tel", para1,ids=ids)
def test_demo1(self, name, tel):
    print('name is {} ans tel is {}'.format(name, tel))

file

6.标记用例:已知输入某组数据可知对应结果,数据可直接标记

para1 = [
    (name[2], tel[2]),
    pytest.param(0,0,marks=pytest.mark.skip),
    pytest.param(-1,0,marks=pytest.mark.xfail)
]

class Test_Demo():

    @pytest.mark.parametrize("name,tel", para1)
    def test_demo1(self, name, tel):
        print('name is {} ans tel is {}'.format(name, tel))

file

讨论数量: 1

排版看着很舒服

4年前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!