pytest---参数化
无论什么自动化中,参数化是都会用到的,unittest框架中可以通过ddt进行完成参数化操作,那么pytest如何完成参数化?
parametrize
在pytest中的参数化可以通过自带的装饰器进行完成 @pytest.mark.parametrize('xxx,aaa,bbb ')
通过传入用户名,密码,然后在用例名中把传入的参数打印出来
# test__01.py import pytest class Test_01: @pytest.mark.parametrize('user, pwd', [('anjing', '123'), ('test', '222') ]) def test_01(self, user, pwd): print('用户名:%s,密码:%s' %(user, pwd)) def test_02(self): print('----用例02----') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

通过执行结果,可以看到,已经成功的完成了参数化内容。
自定义参数信息
方法一:
我们传入每个参数肯定有传入的道理,意思就是我们这条用例执行的参数信息表示什么,可以直接通过pytest.parm中的id进行添加
#coding:utf-8 import pytest class Test_01: @pytest.mark.parametrize('user', [pytest.param('anjing', id=("This is anjing")), pytest.param('test', id=("This is test")), pytest.param('admin', id=('This is admin'))] ) def test_01(self, user): print('用户名:%s' %user) if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

方法二:
我们处了通过param的方式进行备注参数信息,也可以通过ids方式进行
import pytest class Test_01: @pytest.mark.parametrize('user, pwd', [('anjing', '123'), ('test', '222'), ('ceshi', '1234'), ], ids=['This is anjing ', 'This is test', 'This is ceshi']) def test_01(self, user, pwd): print('用户名:%s,密码:%s' %(user, pwd)) def test_02(self): print('----用例02----') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

跳过指定参数
如果某次测试不需要用到一些参数,可以通过方法: pytest.param('aaaa', 'xxxx', marks=paaaaytest.mark.skip) 进行跳过
import pytest class Test_01: @pytest.mark.parametrize('user, pwd', [('anjing', '123'), ('test', '222'), pytest.param('admin', '12345', marks=pytest.mark.skip) ]) def test_01(self, user, pwd): print('用户名:%s,密码:%s' %(user, pwd)) def test_02(self): print('----用例02----') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

通过执行结果,可以看出来我们标记的admin和12345参数已经被跳过。
多组参数混合使用
在平常手工测试过程中,经常会遇到一些数据混合使用,这里pytest的参数化也可以多组参数进行一起使用。比如我们每个parametrize装饰器中都存放3组数据,这样结果就是3*3=9,一共9个结果
import pytest class Test_01: @pytest.mark.parametrize('user', ['anjing','test', 'admin']) @pytest.mark.parametrize('age', ['12','13', '14']) def test_01(self, user, age): print('用户名:%s,年龄:%s' %(user, age)) if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

通过结果表明,参数都进行了混合使用。大大的减少了我们对于组合参数的测试时间。
字典格式
前面介绍了通过列表中传入元祖的形式进行使用,其实我们也可以传入字典形式,这样更加方便我们调用
import pytest class Test_01: @pytest.mark.parametrize('user', [{'user':"anjing", 'pwd':"123456"}, {'user':"1234", 'pwd':"123456"}]) def test_01(self, user): print('账号信息:%s' %(user)) if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

安静简单的介绍了pytest中的参数化内容,小伙伴可以自己手动进行尝试下。如果安静写的对您有所帮助,点个关注,持续更新。

浙公网安备 33010602011771号