pytest运行coverage生成覆盖率报告提示No source for code:config-3.py报错
问题诱因
该报错由coverage代码统计范围配置不当引发:
执行coverage run时若未显式指定待统计的项目源码范围,coverage会默认记录运行过程中加载的全量.py文件路径。报错信息中的config-3.py是Python运行时、虚拟环境或pytest插件生成的临时桩脚本,不属于项目业务代码,会在进程退出后被自动清理。后续生成覆盖率报告时,coverage无法定位到这个已被删除的临时文件,就会抛出"No source for code"类错误。
修复方法
- 执行采集命令时显式指定源码统计范围,仅采集项目自身代码目录下的文件,从根源避免纳入临时文件。若项目业务代码存放在根目录的
gotcha包下,可将采集命令替换为:
coverage run --source=./gotcha -m pytest tests/
- 在项目根目录新建
.coveragerc配置文件,固定coverage统计规则,无需每次执行命令追加参数,参考配置如下:
[run] # 替换为实际的项目源码存放目录 source = gotcha # 配置无需统计的文件匹配规则 omit = */tests/* */.venv/* */site-packages/* */tmp/* *config-*.py
注意:配置中的source路径不要包含测试用例目录、虚拟环境目录,否则仍可能出现无关文件被纳入统计的问题。
- 若之前已经执行过采集,生成了损坏的
.coverage缓存文件,先执行命令删除旧缓存,再重新走采集、生成报告的流程:
rm .coverage
完成上述配置后,再执行coverage report或coverage html即可正常生成覆盖率报告。
内容的提问来源于stack exchange,提问作者arnino
相关产品推荐
相关产品推荐

