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))
排版看着很舒服