pytest测试框架中setup与teardown的执行机制详解

林见深
林见深
发布时间:2026-10-13 | 4人浏览过
原创

本文详细解析pytest测试框架中setup与teardown的执行机制。pytest提供两套独立的钩子函数:模块级/函数级(setup_module/teardown_module等)适用于非类场景,以及方法级/类级(setup_method/teardown_method、setup/teardown)适用于类场景。通过具体代码示例,展示了各钩子函数的触发时机与作用范围,帮助开发者正确管理测试环境的初始化和清理工作。

pytest setup与teardown概述

pytest测试框架提供了完善的生命周期管理功能,其中setup与teardown机制是核心组成部分。

pytest内部定义了两套相互独立的setup与teardown机制,同时保留了一对相对灵活的setup与teardown函数,供不同场景使用。

模块级与函数级钩子

根据作用范围的不同,这些钩子函数可分为模块级与函数级两类。

模块级钩子包括setup_module和teardown_module,它们在整个测试模块开始时执行一次,且仅在模块顶层定义,不能放在类内部。

函数级钩子包括setup_function和teardown_function,它们仅对非类中的函数用例生效,在每次函数测试开始前和结束后执行,同样不能在类中使用。

方法级与类级钩子

除了模块级和函数级,pytest还定义了方法级与类级的钩子函数,主要用于类中的测试用例。

方法级钩子包括setup_method和teardown_method,它们在类中每个测试方法执行前后运行,确保每个方法都有独立的初始化和清理过程。

类级钩子包括setup_class和teardown_class,它们仅在类中所有测试方法执行前和执行后各运行一次,用于整个类的资源准备和释放。

在类内部,还可以定义普通的setup和teardown函数,它们在调用每个测试方法的前后执行,优先级高于类级钩子,用于每个具体用例的初始化和清理。

代码示例与执行顺序

以下代码示例展示了上述各种setup与teardown函数的具体用法和执行顺序。


import pytest
# 模块中的方法
def setup_module():
	print(
		"setup_module:整个test_module.py模块只执行一次"
	)
def teardown_module():
	print(
		"teardown_module:整个test_module.py模块只执行一次"
	)
def setup_function():
	print("setup_function:每个用例开始前都会执行")
def teardown_function():
	print("teardown_function:每个用例结束后都会执行")
# 测试模块中的用例1
def test_one():
	print("正在执行测试模块----test_one")
# 测试模块中的用例2
def test_two():
	print("正在执行测试模块----test_two")
# 测试类
class TestCase():
	def setup_class(self):
	print("setup_class:所有用例执行之前")
def teardown_class(self):
	print("teardown_class:所有用例执行之后")   def setup_method(
		self):
	print("setup_method: 每个用例开始前执行")
def teardown_method(self):
	print("teardown_method: 每个用例结束后执行")
def setup(self):
	print("setup:每个用例开始前都会执行")
def teardown(self):
	print("teardown:每个用例结束后都会执行")
def test_three(self):
	print("正在执行测试类----test_three")
def test_four(self):
	print("正在执行测试类----test_four")
if __name__ == "__main__":
	pytest.main(["-s", "test_module.py"])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表