pytest 核心配置:参数、文件、环境变量全解析(含优先级验证)
pytest 核心配置:参数、文件、环境变量全解析(含优先级验证)
在使用 pytest 做自动化测试时,配置方式直接影响测试效率。本文将梳理 pytest 的三类配置方式,并通过实战验证其优先级规则,帮你快速掌握测试配置的最佳实践。
一、pytest 配置的三种方式
pytest 支持 命令行参数、配置文件、环境变量 三类配置,覆盖“临时调试”“持久默认”“全局统一”等场景。
1. 命令行参数:临时调试的首选
这是最常用的配置方式,直接在 pytest 命令后附加参数,用于临时指定本次测试的行为。
- 格式规则:
-开头:缩写参数(如-v对应--verbose),简洁高效;--开头:全称参数(如--capture=no),直观易读。
- 示例:
# 显示详细用例名称 + 输出 print 内容 pytest -vs - 适用场景:临时调试、单次测试的参数调整。
2. 配置文件:持久化的默认规则
通过配置文件将常用参数固化,pytest 会自动读取项目内的配置文件,实现“一次配置,永久生效”。
- 支持的配置文件:
pytest.ini:最常用的专用配置文件;pyproject.toml:现代 Python 项目的推荐配置文件;tox.ini/setup.cfg:与项目打包、多环境工具配合使用。
- 核心配置项
addopts:
用于指定默认命令行参数,等价于每次执行pytest时自动附加这些参数。
示例(pytest.ini):[pytest] # 默认开启详细日志 + 显示 print 内容 addopts = --verbose --capture=no - 适用场景:团队统一测试规则、项目长期稳定的默认配置。
3. 环境变量:全局级别的兜底配置
通过操作系统的环境变量配置 pytest,作用范围是当前系统会话。
- 格式规则:
- 变量名以
PYTEST_开头(必须大写); - 变量值为字符串类型。
- 变量名以
- 示例(Windows):
# 全局默认开启详细日志 set PYTEST_ADDOPTS=--verbose - 适用场景:CI/CD 环境、多项目的全局统一配置。
二、配置优先级:谁的规则说了算?
pytest 配置的优先级为:命令行参数 > 配置文件 > 环境变量。我们通过实战验证这一规则。
验证前提
准备测试文件 test_priority.py,观察“详细日志”和“print 输出”两个效果:
def test_config_priority():
print("观察:该内容是否显示?")
assert True
场景1:仅用环境变量(最低优先级)
- 配置:设置环境变量
PYTEST_ADDOPTS=--verbose; - 执行:
pytest; - 结果:
test_priority.py::test_config_priority PASSED # 详细日志生效 - 结论:环境变量的配置仅在无其他配置时生效。
场景2:环境变量 + 配置文件(配置文件覆盖环境变量)
- 配置:
- 保留环境变量
PYTEST_ADDOPTS=--verbose; - 配置文件
pytest.ini写入addopts = --capture=no;
- 保留环境变量
- 执行:
pytest; - 结果:
test_priority.py . # 详细日志失效,print 内容显示 - 结论:配置文件优先级高于环境变量,会覆盖环境变量的配置。
场景3:环境变量 + 配置文件 + 命令行参数(命令行最高)
- 配置:保留场景2的配置,执行
pytest -v; - 结果:
test_priority.py::test_config_priority 观察:该内容是否显示? PASSED # 详细日志+print 均生效 - 结论:命令行参数优先级最高,会与配置文件的配置叠加生效。
三、优先级总结表
| 配置方式 | 优先级 | 生效规则 |
|---|---|---|
| 命令行参数 | 最高 | 与配置文件叠加,冲突时覆盖低优先级配置 |
| 配置文件 | 中等 | 覆盖环境变量,与命令行参数叠加 |
| 环境变量 | 最低 | 仅无其他配置时生效 |
四、最佳实践
- 日常开发:用
pytest -vs命令行参数,兼顾详细日志与调试输出; - 团队协作:在
pytest.ini中配置addopts,统一团队测试默认行为; - CI/CD 环境:用环境变量配置全局通用参数,配合命令行参数调整特殊需求。
浙公网安备 33010602011771号