前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Pytest之@pytest.mark.usefixtures()、叠加usefixtures、(autouse=True)详解

Pytest之@pytest.mark.usefixtures()、叠加usefixtures、(autouse=True)详解

作者头像
王大力测试进阶之路
发布2019-10-25 19:20:28
发布2019-10-25 19:20:28
2.3K00
代码可运行
举报
文章被收录于专栏:橙子探索测试橙子探索测试
运行总次数:0
代码可运行

usefixtures与传fixture区别

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

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

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

代码语言:javascript
代码运行次数:0
复制

@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 当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了 autouse设置为True,自动调用fixture功能

代码语言:javascript
代码运行次数:0
复制
@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
代码语言:javascript
代码运行次数:0
复制
@pytest.fixture(scope='module', autouse=True)
def test1():
    print('\n开始执行module')

@pytest.fixture(scope='class', autouse=True)
def test2():
    print('\n开始执行class')


@pytest.fixture(scope='function', autouse=True)
def test3():
    print('\n开始执行function')

def test_a():
    print('---用例a执行---')


def test_d():
    print('---用例d执行---')


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 4 items

test03.py 
开始执行module

开始执行class

开始执行function
---用例a执行---
.
开始执行class

开始执行function
---用例d执行---
.
开始执行class

开始执行function
---用例b执行---
.
开始执行function
---用例c执行---
.

============================== 4 passed in 0.05s ==============================

Process finished with exit code 0

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

代码语言:javascript
代码运行次数:0
复制
@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()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。

代码语言:javascript
代码运行次数:0
复制
@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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档