pytest测试框架fixture应用实战总结,彻底打通封装框架

前言

fixtrue修饰器标记的方法通常用于在其他函数、模块、类或者整个工程调用时会优先执行,通常会被用于完成预置处理和重复操作。

例如:登录,执行SQL等操作。

完整方法如下:

fixture(scope='function',params=None,autouse=False,ids=None,name=None)

参数说明:

1.scope参数:标记方法的作用域。有4个可选值:function(默认,函数)、class(类)、module(模块)、package/session(包)

(1)作用域为函数实例

 

import pytest



@pytest.fixture(scope='function',autouse=True)

def login():

print('登录系统')


def test_01():

print('测试用例一')


class TestCase:


def test_03(self):

print('测试用例三')


def test04(self):

print('测试用例四')



if __name__ == '__main__':


pytest.main(['-s','pytest-demo.py'])

注意:该模块中所有的函数在执行之前都会执行login函数。

(2)作用域为类实例一:

 

import pytest



@pytest.fixture(scope='class',autouse=True)

def login():

print('登录系统')


def test_01():

print('测试用例一')


class TestCase1:

def test_03(self):

print('测试用例三')


def test04(self):

print('测试用例四')


class TestCase2:

def test_05(self):

print('测试用例五'')


def test06(self):

print('测试用例六')


if __name__ == '__main__':


pytest.main(['-s','pytest-demo.py'])

注意:在TestCase1类和TestCase2类中,login方法都只会被执行一次。函数test_01也会执行一次。

(2) 作用域为类实例二:

 

import pytest


@pytest.fixture()

def login():

print('登录系统')


def test_01():

print('测试用例一')


@pytest.mark.usefixtures('login')

class TestCase:

def test_03(self):

print('测试用例三')


def test04(self):

print('测试用例四')


if __name__ == '__main__':


pytest.main(['-s','pytest-demo.py'])

注意:此方式函数不会被执行,但是被作用的类中的每个函数执行之前都会执行一次,在测试类前面添加:@pytest.mark.usefixtures(‘login’) 其中login为函数名。

(3)作用域为module时表示整个模块中都只会执行一次。这里不在累述。

(4)作用域为package时表示整个包都只会执行一次。这里不在累述。

(5)在N个用例中指定某一个用例执行

 

import pytest


@pytest.fixture()

def login():

print('登录系统')


def test_01():

print('测试用例一')


class TestCase1:

def test_03(self):

print('测试用例三')


def test04(self,login):

print('测试用例四')


if __name__ == '__main__':


pytest.main(['-s','pytest-demo.py'])

注意:test04以参数的形式传入了执行的方法login,这样来指定只有test04方法在执行时才执行login方法。

特别注意:如果在login函数中加入reutrn ‘success’,在test04方法中加入print(login),那么print(login)打印的值就是返回的success.

Fixture参数之params参数可实现参数化:(可以为list和tuple,或者字典列表,字典元祖等)

实例如下:


import pytest


def read_yaml():

return ['1','2','3']


@pytest.fixture(params=read_yaml())

def get_param(request):

return request.param


def test01(get_param):

print('测试用例:'+get_param)


if __name__ == '__main__':

pytest.main(['-s','pytest-demo.py'])

注意:

1.此例中test01方法被执行了三次,分别使用的数据为’1′,’2′,’3’,此结果类似于ddt数据驱动的功能。特别注意:这里的request参数名是固定的,然后request.param的param没有s哦。

2.可以把return request.param改成yield request.param,yield也是返回的意思,它和return的区别在于return返回后后面不能接代码,但是yield返回后,后面还可以接代码。

Fixture其他参数:

1.autouse参数:自动执行,上面的示例已经用到了。

2.ids参数:ids参数是给每一项params参数设置自定义名称用的,意义不大。

3.name参数:相对于把被fixture标记的方法重命名,意义不大。
如下图所示案例:


@pytest.fixture(name='mashang') #name参数给fixture设置名称

def login():

print('登录方法')


def testcase(mashang): #使用name参数名来引用,还用login报错

print('测试用例')

使用@pytest.mark.parametrize()方法实现参数化

方法详情:

parametrize(argnames,argvalues,indirect=False,ids=None,scope=None)

常用参数:

argnames:参数名

argnames:参数值(可以为list和tuple,或者字典列表,字典元祖等),参数值有N个,用例就会执行N次。

(1)使用方式一


import pytest


lis = [{'name':'zhangsan'},{'age':'18'},{'sex','男'}]


@pytest.mark.parametrize('caseinfo',lis)

def test01(caseinfo):

print(caseinfo)


if __name__ == '__main__':

pytest.main(['-s','pytest-demo.py'])

(2)使用方式二类似于@unpack解包功能实现参数化


import pytest


lis = [('admin','123'),('admin1','123456')]

@pytest.mark.parametrize('username,password',lis)


def test01(username,password):

print(username,password)


if __name__ == '__main__':

pytest.main(['-s','pytest-demo.py'])

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest测试框架中的fixture是为了在测试过程中提供预定义的测试数据或测试环境设置。在给定的引用中,我们可以看到三个使用fixture的示例。 引用中的示例展示了一个带有fixture的测试类TestCase。其中的test4方法接受一个名为test1的fixture作为参数。在这个方法中,我们可以看到对test1的使用,并且验证了test1的值与预期值sex相等。 引用中的示例展示了一个带有fixture的测试函数test2。在这个函数中,我们可以看到test1作为一个fixture被注入到test2函数中,然后我们可以验证test1的值与预期值'leo'相等。 引用中的示例也展示了一个带有fixture的测试函数test3。与前面的示例类似,test3函数接受一个名为test1的fixture作为参数,并在函数中使用test1并验证其值与预期值name相等。 总之,pytestfixture可以用于提供测试数据或设置测试环境,并且可以在测试函数或测试类中使用。它可以帮助我们更方便地编写和组织测试代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [pytest框架fixture详细使用](https://blog.csdn.net/king_liuhui/article/details/122819352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值