因為用心,才會喜歡

粥雨

Pytest - Fixture(6) - 作用域混用

Pytest - Fixture作用域混用

  • 若测试用例调用多个不同级别的作用域,都会同时生效:

conftest.py

import pytest

"""会话级别fixture,作用域当前目录"""
@pytest.fixture(scope="session")
def login_session():
    """作用于整个py文件"""
    print("\n*** session级别的作用域前置操作 ***")
    yield
    print("*** session级别的作用域后置操作 ***")

test_py.py

import pytest

"""用例级别fixture,作用域单个用例"""
@pytest.fixture(scope="function")
def login_func():
    print("\n--- function级别的作用域前置操作 ---")
    yield
    print("--- function级别的作用域后置操作 ---")

    
"""类级别fixture,作用域整个类"""
@pytest.fixture(scope="class", autouse=True)
def login_cls():
    print("\n=== class级别的作用域前置操作 ===")
    yield
    print("=== class级别的作用域后置操作 ===")

    
"""模块级别fixture,作用域整个py文件"""
@pytest.fixture(scope="module")
def login_module():
    print("\n^^^ module级别的作用域前置操作 ^^^")
    yield
    print("^^^ module级别的作用域后置操作 ^^^")
    

def test_s2(login_session, login_module, login_cls, login_func):
    print("\n用例test_s2:在类外的测试用例")

class Test_cls():
    def test_s1(self, login_func, login_cls, login_module, login_session):
        print("\n用例test_s1:在类中的测试用例")

    def test_s3(self, login_func):
        print("\n用例test_s3:在类中的测试用例")

if __name__ == '__main__':
    pytest.main(['-s', 'test_py.py'])


从执行结果中可以看出(测试用例test_s1,test_s2),不管测试用例调用Fixture函数顺序如何,执行顺序均为(从左到右分别为:先执行 > 后执行):

session > module > class > function


  • 执行结果如图所示各级别作用域:
    • 黄色框: function
    • 紫色框: class
    • 蓝色框: module
    • 红色框: session

image-20220922120921976


posted @ 2023-05-29 09:24  粥雨  阅读(37)  评论(0编辑  收藏  举报