- 共享测试资源。
- 实现初始化和清理操作。
- 参数化测试数据。
- 依赖其他夹具
来个例子
pytest test.py -vs 执行后输出如下
夹具的定义
上边只是夹具的一种定义方式,夹具还有其它定义方式,如下夹具返回值
夹具可以返回值,这个返回值可以在测试函数中使用,运行如下代码pytest test.py
夹具(定义)参数
autouse
autouse=True 确实让夹具独立自动调用,不再依赖于手动在测试用例的显式注入
scope
pytest 夹具的作用域(scope) 是它的核心特性之一,非常强大。共有4种:- scope=“function”(默认):每个测试函数都新建/销毁
- scope=“class”:每个测试类共享实例
- scope=“module”:每个.py文件共享实例
- scope=“session”:整个pytest运行过程共享实例
| 作用域 | 执行频率 | 典型适用场景 | 示例 |
|---|---|---|---|
| function | 每个测试函数执行一次 | 需要完全隔离的测试数据、临时文件、独立状态 | 临时目录、测试数据生成、独立数据库事务 |
| class | 每个测试类执行一次 | 类内共享的昂贵资源、相同配置的测试组 | 浏览器实例、API客户端、类级别的Mock |
| module | 每个.py文件执行一次 | 模块内共享的全局状态、测试数据文件 | 配置文件加载、模块级测试数据、共享数据库连接 |
| session | 整个pytest运行执行一次 | 全局共享的昂贵资源、一次性初始化 | 数据库连接池、缓存服务器、全局配置 |

