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

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

本文详细解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。