pytest---usefixtures与传fixture区别

usefixtures与传fixture区别

1、如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

2、当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

1.函数或类里面方法直接传fixture的函数参数名称

 
@pytest.fixture()
def test1():
    print('\n开始执行function')
 
def test_a(test1):
    print('---用例a执行---')
 
 
class TestCase:
    def test_b(self,test1):
        print('---用例b执行')
 
if __name__=="__main__":
    pytest.main(["-s","test03.py"])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 2 items
 
test03.py 
开始执行function
---用例a执行---
.
开始执行function
---用例b执行
.
 
============================== 2 passed in 0.04s ==============================
 
Process finished with exit code 0
 

2、fixture自动使用autouse=True 当用例很多的时候,每次都传这个参数,会很麻烦。默认是function ,只要是函数级别都会调用下面的代码;fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了 autouse设置为True,自动调用fixture功能。

@pytest.fixture(autouse=True)
def test1():
    print('\n开始执行function')
 
def test_a():
    print('---用例a执行---')
 
 
class TestCase:
    def test_b(self):
        print('---用例b执行')
 
if __name__=="__main__":
    pytest.main(["-s","test03.py"])
 
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 2 items
 
test03.py 
开始执行function
---用例a执行---
.
开始执行function
---用例b执行
.
 
============================== 2 passed in 0.04s ==============================
 
Process finished with exit code 0

3、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

@pytest.fixture()
def test1():
    print('\n开始执行function')
 
@pytest.mark.usefixtures('test1')
def test_a():
    print('---用例a执行---')
 
 
@pytest.mark.usefixtures('test1')
class TestCase:
 
    def test_b(self):
        print('---用例b执行---')
 
    def test_c(self):
        print('---用例c执行---')
 
 
if __name__=="__main__":
    pytest.main(["-s","test03.py"])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 3 items
 
test03.py 
开始执行function
---用例a执行---
.
开始执行function
---用例b执行---
.
开始执行function
---用例c执行---
.
 
============================== 3 passed in 0.05s ==============================
 
Process finished with exit code 0
 
 

4、叠加usefixtures

如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。

@pytest.fixture()
def test1():
    print('\n开始执行function1')
 
 
@pytest.fixture()
def test2():
    print('\n开始执行function2')
 
 
@pytest.mark.usefixtures('test1')
@pytest.mark.usefixtures('test2')
def test_a():
    print('---用例a执行---')
 
 
@pytest.mark.usefixtures('test2')
@pytest.mark.usefixtures('test1')
class TestCase:
 
    def test_b(self):
        print('---用例b执行---')
 
    def test_c(self):
        print('---用例c执行---')
 
 
if __name__=="__main__":
    pytest.main(["-s","test03.py"])
 
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
collected 3 items
 
test03.py 
开始执行function2
 
开始执行function1
---用例a执行---
.
开始执行function1
 
开始执行function2
---用例b执行---
.
开始执行function1
 
开始执行function2
---用例c执行---
.
 
============================== 3 passed in 0.04s ==============================
 
Process finished with exit code 0
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值