使用tox运行pytest测试时出现no-data-collected覆盖率警告
解决tox+pytest覆盖率无数据收集的警告问题
这个问题核心是tox的隔离虚拟环境默认没把项目的src目录加入Python路径,导致pytest-cov找不到要覆盖的代码;而直接运行pytest时,本地环境的Python路径包含项目根目录,所以能正常收集覆盖率数据。
给你两个靠谱的解决方案:
方案一:给tox环境添加PYTHONPATH
修改你的tox.ini,在[testenv]下添加环境变量指定src路径,同时把pytest参数直接写在commands里避免配置冲突:
[tox] envlist = py39 [testenv] deps = pytest pytest-cov -rrequirements.txt -rrequirements.test # 添加这行,让tox环境能找到src里的代码 setenv = PYTHONPATH={toxinidir}/src # 直接在commands里指定pytest参数,确保覆盖规则生效 commands = pytest -v --cov=src tests/ {posargs} # 可以把原来的[pytest] section注释掉,避免重复配置干扰 # [pytest] # addopts = # -v # --cov=src # tests/
方案二:用editable模式安装项目(更符合Python包规范)
如果你的项目是标准src布局,推荐在tox环境里先安装项目的可编辑版本,这样src里的代码会被识别为已安装的包,覆盖率收集自然正常:
[tox] envlist = py39 [testenv] deps = pytest pytest-cov -rrequirements.txt -rrequirements.test # 先安装项目的editable版本,再跑测试 commands = pip install -e . pytest {posargs} [pytest] addopts = -v --cov=src tests/
这两种方案都能解决你遇到的CoverageWarning: No data was collected问题,选哪种看你项目的具体情况,方案二更适合长期维护的项目。
内容的提问来源于stack exchange,提问作者user1445709
相关产品推荐
相关产品推荐

