使用 pytest 覆盖“无代码源”

问题描述 投票:0回答:4

我正在尝试通过我的 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'.

到目前为止我还没有找到合适的解决方案来解决这个问题

python unit-testing pytest code-coverage coverage.py
4个回答
1
投票

可以使用命令忽略错误

coverage html -i

解决了我的问题


1
投票

此问题通常是由较旧的覆盖结果文件引起的,因此您可以:


1
投票

另一种可能的解决方案是指定

source
属性。就我而言,我指定了实际的源文件夹(例如
source = .
),而不是整个项目(
src
)。这可以在命令行上完成:

coverage run --source=src

或将其包含在您的

.coveragerc
文件中:

[run]
source = src
...

由于我正在导入*的特定库,我遇到了同样的问题,但我从未弄清楚为什么该库影响了覆盖范围,而其他库却没有。

虽然这可能只是一种解决方法,但仅检查源文件夹是有意义的,而忽略所有错误(使用

-i
)也好不了多少。

* 该库使用

opencv-python-headless
,我认为这是此问题的根本原因。


0
投票

这与https://github.com/nedbat/coveragepy/issues/1653

有关

我的临时解决方案是显式省略可能在安装时创建的

opencv-python
合成文件。

将此添加到您的

.coveragerc
文件(或您正在使用的任何其他配置文件)中:

omit = 
    config.py
    config-3.py
© www.soinside.com 2019 - 2024. All rights reserved.