首页/开发/软件测试速查/conftest.py 共享配置
自动化测试66 条

conftest.py 共享配置

conftest.py 组织共享 fixture 与钩子:按目录层级自动加载、用例无需 import;子目录同名 fixture 覆盖上层,适合按项目结构分层组织资源。

软件测试速查开发更新于 2026-10-13

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 只负责环境与资源,业务断言留在用例里:混在一起时失败信息难读,也容易把一个用例的断言服务给所有用例。

易错点

  • conftest 互相 import 测试模块造成循环导入:收集阶段直接报错,排查成本高。
  • 把环境差异写死在 conftest:本地与 CI 收集到的用例集合不一致,测试数量都对不上。
  • 重资源放在 function 级 fixture:每个用例重新登录或重启服务,套件时间成倍增长。
  • 子目录覆盖与上层同名 fixture 却改了语义:使用者以为行为一致,断言按旧语义写。
  • autouse 滥用:隐式改变所有用例的前置条件,测试可读性与定位难度同步上升。
  • fixture 里准备业务数据却不清理:用例间数据互相污染,换执行顺序结果就变。

数据来源与参考

  • pytest 官方文档:conftest.py 与 Fixtures 章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌