我正在尝试通过我的 pytest 测试来测量代码覆盖率。我尝试遵循覆盖率快速入门指南(https://coverage.readthedocs.io/en/6.4.1/)
当我使用以下命令运行测试时,一切看起来都很好
coverage run -m pytest tests/
===================================== test session starts ======================================
platform linux -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/arnaud/Documents/Github/gotcha
collected 4 items
tests/preprocessing/test_preprocessing.py .... [100%]
====================================== 4 passed in 0.30s =======================================
但是,当我尝试使用这些命令之一访问报告时,
coverage report
coverage html
我收到以下消息:
No source for code: '<project_directory>/config-3.py'.
到目前为止我还没有找到合适的解决方案来解决这个问题
可以使用命令忽略错误
coverage html -i
解决了我的问题
此问题通常是由较旧的覆盖结果文件引起的,因此您可以:
-i
标志运行覆盖命令以忽略错误 - 您可以在覆盖官方文档中阅读更多相关信息:https://coverage.readthedocs.io/en/6.4.1/cmd.html#reporting 另一种可能的解决方案是指定
source
属性。就我而言,我指定了实际的源文件夹(例如 source = .
),而不是整个项目(src
)。这可以在命令行上完成:
coverage run --source=src
或将其包含在您的
.coveragerc
文件中:
[run]
source = src
...
由于我正在导入*的特定库,我遇到了同样的问题,但我从未弄清楚为什么该库影响了覆盖范围,而其他库却没有。
虽然这可能只是一种解决方法,但仅检查源文件夹是有意义的,而忽略所有错误(使用
-i
)也好不了多少。
* 该库使用
opencv-python-headless
,我认为这是此问题的根本原因。
这与https://github.com/nedbat/coveragepy/issues/1653
有关我的临时解决方案是显式省略可能在安装时创建的
opencv-python
合成文件。
将此添加到您的
.coveragerc
文件(或您正在使用的任何其他配置文件)中:
omit =
config.py
config-3.py