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'])

浙公网安备 33010602011771号