conftest.py 是什么
conftest.py 是 pytest 的共享配置层:里面定义的 fixture 与钩子按目录层级自动加载,用例无需 import 就能使用;子目录的 conftest 可覆盖上层同名 fixture。它让资源准备(浏览器、客户端、数据库连接)按项目结构分层组织——全局通用的放根目录,专项的放子目录,真正做到按需可见。
基本信息
| 加载机制 | 按目录层级自动发现,无需手动 import |
|---|---|
| 覆盖规则 | 子目录同名 fixture 覆盖上层定义 |
| 常用内容 | fixture、autouse 清理、pytest_collection_modifyitems 等钩子 |
| scope 支持 | function、class、module、session 各级作用域 |
| 可见范围 | 只有所在目录及子目录的用例能用其中的 fixture |
目录分层
目录分层
tests/
conftest.py # 全局 fixture(如浏览器、登录态)
api/
conftest.py # API 专用 fixture(如 client)
test_users.py
ui/
conftest.py # UI 专用 fixture(如 page 对象)
test_login.py典型使用场景
- 全局资源管理:session 级启动浏览器或服务,整套用例复用一次。
- 分层定制:API 目录注入 HTTP 客户端,UI 目录注入页面对象。
- 统一清理:autouse fixture 在每个用例后重置数据、关连接。
- 环境切换:按环境变量选择配置,本地与 CI 走同一套 fixture 接口。
- 收集定制:钩子里按参数跳过、排序或动态加标记。
- 复用登录态:一次登录、多目录共享凭证对象。
- 失败现场收集:在报告钩子里把截图与日志挂进失败用例的输出。
conftest 中的 fixture 同样支持 scope 与 autouse;钩子函数(如 pytest_collection_modifyitems)也放这里。
fixture 分层命名保持语义清晰:上层给默认实现,子目录只覆盖差异部分,避免同名 fixture 行为相隔甚远。
conftest 属于代码:纳入版本管理与评审,修改它等于修改所有用例的运行环境。
conftest 只负责环境与资源,业务断言留在用例里:混在一起时失败信息难读,也容易把一个用例的断言服务给所有用例。