请问pytest有case级别的setup和teardown吗

是的,pytest可以使用@pytest.fixture装饰器来定义case级别的setup和teardown函数。在底层实现上,这些被@pytest.fixture装饰的函数会在测试用例之前和之后自动执行。

例如,你可以定义一个case级别的setup函数如下:

import pytest

@pytest.fixture(scope='function')
def setup_function():
    # setup code
    print("case级别的setup函数")

def test_case1(setup_function):
    # test case code
    print("执行测试用例1")

def test_case2(setup_function):
    # test case code
    print("执行测试用例2")

运行这些测试用例时,每个测试用例执行之前都会先执行setup_function函数,然后执行测试用例代码。如果你还想定义一个case级别的teardown函数,可以使用yield语句。

import pytest

@pytest.fixture(scope='function')
def setup_function_teardown():
    # setup code
    print("case级别的setup函数")

    yield

    # teardown code
    print("case级别的teardown函数")

def test_case3(setup_function_teardown):
    # test case code
    print("执行测试用例3")

def test_case4(setup_function_teardown):
    # test case code
    print("执行测试用例4")

这样,在每个测试用例执行后,会自动执行teardown函数。整个过程中都是由pytest来管理和执行setup和teardown函数。