一、pytest.ini 参数整合核心价值
核心优势:
- ✅ 永久保存常用配置:不再每次输入冗长命令
- ✅ 团队统一执行标准:确保所有成员使用相同参数
- ✅ 简化操作流程:只需运行
pytest
即可应用全部配置 - ✅ 环境一致性:不同环境(本地/CI)保持相同行为
二、基础配置模板与解析
2.1 常用配置整合模板
# pytest.ini
[pytest]
# 基本执行参数
addopts =
-v # 详细输出
--tb=short # 精简错误信息
--durations=10 # 显示最慢10个测试
--strict-markers # 强制标记注册
# 标记注册
markers =
smoke: 核心业务流程验证
api: API接口测试
slow: 执行较慢的测试
# 文件搜索配置
testpaths = tests/
python_files = test_*.py
python_classes = Test*
python_functions = test_*
2.2 配置解析表
参数 | 作用 | 对应命令行 |
---|---|---|
addopts | 默认命令行参数 | 所有pytest 开头的选项 |
markers | 标记注册说明 | pytest --markers |
testpaths | 测试搜索路径 | pytest tests/ |
python_files | 测试文件匹配模式 | - |
python_classes | 测试类命名模式 | - |
python_functions | 测试函数命名模式 | - |
三、执行场景配置实战
3.1 开发环境配置(推荐)
# 开发日常使用(兼顾效率与信息量)
[pytest]
addopts =
-v # 显示详细用例名
--tb=auto # 自动错误格式
--lf # 优先运行失败用例
--sw # 失败后退出
-n auto # 多核并行加速
markers =
debug: 调试中的测试
wip: 半成品测试
3.2 持续集成(CI)配置
# CI环境专用(稳定优先)
[pytest]
addopts =
--junitxml=report.xml # JUnit格式报告
--html=report.html # HTML报告
--cov=src/ # 覆盖率收集
--strict-markers # 严格标记控制
testpaths =
tests/unit
tests/integration
3.3 专项测试配置
# 冒烟测试专用配置
[pytest]
addopts =
-m smoke # 只运行冒烟测试
-x # 快速失败
# 性能测试配置
[pytest]
addopts =
-m performance # 仅性能测试
--durations=20 # 详细耗时分析
四、配置参数详解与演示
4.1 addopts
- 命令行参数集
# 等同于每次执行:pytest -v --tb=short -n auto
addopts =
-v
--tb=short
-n auto
组合技巧:
# 多行写法(推荐)
addopts =
-v
--tb=short
--durations=5
--strict-markers
# 单行写法
addopts = -v --tb=short --durations=5 --strict-markers
4.2 markers
- 标记注册
markers =
smoke: 核心功能验证
regression: 完整回归测试
slow: 执行缓慢的测试(超过2秒)
效果验证:
pytest --markers
# 输出:
@pytest.mark.smoke: 核心功能验证
@pytest.mark.regression: 完整回归测试
4.3 路径配置组
# 控制测试发现行为
testpaths = tests/unit tests/integration # 搜索路径
python_files = test_*.py check_*.py # 文件匹配模式
python_classes = Test* Check* # 类命名模式
python_functions = test_* check_* # 函数命名模式
五、配置文件优先级系统
5.1 配置加载顺序
- pytest.ini:项目根目录的配置文件(优先级最高)
- conftest.py:各级目录中的配置文件
- 命令行参数:手动输入的参数(优先级最低)
5.2 覆盖关系演示
# pytest.ini
addopts = -v --tb=short
# 命令行执行会失败(被pytest.ini覆盖)
pytest --tb=long # 实际仍使用--tb=short
# 强制覆盖需用-o选项
pytest -o tb=long # 临时覆盖配置
六、企业级配置案例
6.1 电商项目配置模板
# pytest.ini
[pytest]
addopts =
-v
--strict-markers
--durations=5
-n auto
--html=reports/report.html
markers =
cart: 购物车功能
payment: 支付流程
search: 商品搜索
smoke: 冒烟测试 (每日执行)
testpaths =
tests/smoke
tests/modules
python_files = test_*.py
6.2 微服务架构配置
# 服务A的配置
[pytest]
addopts =
-m serviceA
--log-level=INFO
# 服务B的配置(不同目录)
serviceB/pytest.ini:
[pytest]
addopts =
-m serviceB
-v
--cov=serviceB/
七、配置验证与调试技巧
7.1 查看生效配置
# 查看加载的配置文件
pytest --version
# 输出示例:
pytest 7.4.0
configfile: /project/pytest.ini
7.2 参数生效验证
# 查看实际使用的参数
pytest -h | grep "used"
# 测试addopts参数(显示tb配置)
pytest --traceconfig | grep tb
7.3 临时覆盖配置
# 覆盖pytest.ini中的tb配置
pytest -o tb=long
# 禁用部分配置
pytest -o addopts="" # 清空默认参数
八、常见问题解决方案
8.1 配置未生效排查
# 检查配置路径
pytest --version
# 确认文件名为 pytest.ini(非 pyproject.toml)
# 确认文件位置在项目根目录
8.2 参数冲突处理
当多个来源有冲突参数:
# pytest.ini: addopts = -v
# conftest.py: 某插件设置--tb=long
# 命令行:pytest --tb=short
实际优先级:pytest.ini > conftest.py > 命令行
8.3 Windows路径处理
# 正确写法(正斜杠)
testpaths = tests/unit
# 正确写法(原始字符串)
testpaths = C:\\project\\tests
# 错误写法(反斜杠)
testpaths = tests\unit # 解析失败
九、配置总结表
配置项 | 推荐值 | 核心作用 |
---|---|---|
addopts | -v --tb=short | 标准化输出格式 |
markers | 注册项目所有标记 | 防止未定义标记 |
testpaths | tests/unit tests/integration | 控制测试范围 |
norecursedirs | .git __pycache__ | 忽略非测试目录 |
python_files | test_*.py | 识别测试文件 |
junit_suite_name | 项目名-模块 | JUnit报告分类 |
遵循此配置模板,可使项目中所有成员执行
pytest
获得完全一致的测试行为,是团队协作的基础设施级配置。