Pytest 参数化
通常我们需要一条用例运行多条不同的数据,如何实现呢?Pytest框架使用装饰器@pytest.mark.parametrize()实现参数化。
1. @pytest.mark.parametrize("name,tel",para1) 修饰类-作用域整个类,类中所有用例都要带参.否则报错
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))
2.2 多参:
#一个参数对应一个数据,个数需一致
@pytest.mark.parametrize("name,tel", para1)
def test_demo1(self,name,tel):
print('name is {} ans tel is {}'.format(name,tel))
#一个参数对应一组数据
@pytest.mark.parametrize("info", para1)
def test_demo2(self,info):
print('user info is {}'.format(info))
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))
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))
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))
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))
排版看着很舒服