Pytest 常见问题及其解决方案
常见问题及解决方案
1. 测试通过了,但覆盖率不达标
现象:
虽然所有测试都通过了,但覆盖率报告显示某些代码没有被覆盖。
解决方案:
- 检查覆盖率配置:确保
.coveragerc
或pytest.ini
中正确设置了要分析的源代码路径。 - 使用标记(markers)排除测试文件本身:避免测试代码也被计入覆盖率统计。
[run]
source = src
omit =*/tests/**/test_*.py
- 增加更多边界条件测试:特别是异常处理、输入验证等容易遗漏的地方。
2. 测试运行慢,影响开发效率
现象:
每次跑测试都要等很久,严重影响开发节奏。
解决方案:
- 使用
--ff
参数:只重新运行上次失败的测试,快速反馈。
pytest --ff
- 并行运行测试:安装
pytest-xdist
插件,并行执行多个测试用例。
pip install pytest-xdist
pytest -n auto
- 优化测试数据准备:使用
@pytest.fixture(scope="module")
减少重复初始化。
@pytest.fixture(scope="module")
def setup_data():# 只初始化一次yield data
3. 测试依赖外部服务,导致不稳定
现象:
测试依赖数据库、API 等外部服务,导致测试偶尔失败。
解决方案:
- 使用
unittest.mock
模拟外部服务:隔离依赖,确保测试稳定。
from unittest.mock import patch@patch("my_module.external_service_call")