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

 

posted @ 2023-03-28 17:10  CNF油条  阅读(63)  评论(0)    收藏  举报