Pytest 测试框架结构
简介
Pytest 测试框架的结构是指如何组织和管理你的测试代码、测试数据、配置和其他支持文件,使得测试过程高效、清晰并且易于维护。
基本项目结构
Pytest 的测试框架基于 Python 的标准目录结构,但在此基础上增加了一些约定和最佳实践。
my_project/
│
├── src/ # 存放项目源代码
│ └── my_module.py # 示例模块
│
├── tests/ # 存放测试代码
│ ├── test_my_module.py # 对应模块的测试文件
│ └── test_another.py # 另一个测试文件
│
├── conftest.py # 全局配置文件,定义 fixture、hooks 等
├── pytest.ini # pytest 配置文件
├── requirements.txt # 项目依赖文件(包括 pytest)
└── README.md # 项目的说明文件
测试装置
测试装置又可以称为测试夹具,用于为测试提供固定的测试环境或资源。它允许在测试执行之前准备所需的资源,在测试执行后清理这些资源。
在 pytest 中,既支持 unittest 中的 setup 和 teardown 用法,也提供了更灵活的 fixture。
先介绍一下基础的 setup 和 teardown 用法。
setup 与 teardown 作用
- setup:setup 用于为测试提供准备环境的代码。该函数在测试用例运行之前执行。通常被用来初始化测试环境,例如创建数据库连接、加载测试数据等。可以定义不同的作用域(函数级别、类级别、模块级别)的 setup。
- teardown:teardown 函数用于在测试执行后进行清理工作。该函数测试用例运行完成后执行。通常用于释放资源,例如关闭数据库连接、删除临时文件等。可以定义不同的作用域(函数级别、类级别、模块级别)的 teardown。
setup/teardown 函数的作用域
类型 | 规则 |
---|---|
setup_module/teardown_module | 全局模块级 |
setup_class/teardown_class | 类级,只在类中前后运行一次 |
setup_function/teardown_function | 函数级,在类外 |
setup_method/teardown_method | 方法级,类中的每个方法执行前后 |
代码示例:
# 模块级别(优先最高)
def setup_module():
print("资源准备:setup module")
def teardown_module():
print("资源准备:teardown module")
# 函数级别
def setup_function():
print("资源准备:setup function")
def teardown_function():
print("资源销毁:teardown function")
def test_func1():
assert True
class TestDemo:
# 执行测试类前后分别执行 setup_class teardown_class
def setup_class(self):
print("TestDemo setup_class")
def teardown_class(self):
print("TestDemo teardown_class")
# 每个类里面的测试方法前后分别执行 setup teardown
def setup_method(self):
print("TestDemo setup")
def teardown_method(self):
print("TestDemo teardown")
def test_method1(self):
assert True
def test_method2(self):
assert False
执行结果
总结
- 了解 Pytest 测试框架结构。
- 掌握测试装置用法。