在 pytest
中,fixtures
(也称为 fixtures
、setup/teardown
函数或 hooks
)支持多种级别。
1,模块级别:在pytest
中,setup_module()
是一个模块级别的 setup 函数,不定义在类内部。一般定义在模块的顶部,这个函数的目的是在整个模块中的所有测试函数执行之前,只执行一次 setup 操作。teardown_module()
是一个模块级别的 teardown函数,这个函数的目的是在整个模块中的所有测试函数执行之后,只执行一次 teardown操作。
2,类级别 :在每个测试类中的所有测试方法执行之前和之后执行。在pytest
中,通常使用@pytest.fixture(scope="class")
和 @pytest.mark.usefixtures(fixturename, scope="class")
来实现类级别的 fixture。pytest没有提供类似于unittest setup_class和teardown_class的函数。
3,函数/方法级别 (setup()
, teardown()
, setup_method()
, teardown_method()
):在每个测试函数/方法之前和之后执行。setup_mothod()和teardown_method可以定义在类中,并可以随类继承。
注意:pytest本身并不是类,是一种函数,因此它们并不直接支持类的继承。
例子:在一个Python文件test.py中有如下代码:
def setup_module(self):
print("setup_module")
class TestTask(TestFixture):
"""
"""
def setup_method(self):
super().setup_method()
print("setup_method")
def test_task(self):
print("execute testcase test_task")
def teardown_method(self):
super().teardown_method()
print("teardown_method")
logger.info("teardown_method")
def teardown_module(self):
print("in the case, teardown_module")
运行 pytest -s .\testcase\function\training\test.py
运行过程:
testcase\function\training\test_training.py setup_module
[2024-06-24 19:50:21,421] training_set.py - INFO - 9 - trainning_set setup_method
setup_method
execute testcase test_training_task
.[2024-06-24 19:50:21,423] training_set.py - INFO - 12 - trainning_set teardown_method
teardown_method
in the case, teardown_module