python Coverage.py 警告:未收集任何数据,(no-data-collected)

pu82cl6c  于 2022-12-17  发布在  Python
关注(0)|答案(8)|浏览(232)

我尝试使用覆盖率模块查找django项目的覆盖率,但是得到

Coverage.py warning: No data was collected. (no-data-collected)

我的项目文件夹有src和tests文件夹。
当我奔跑

coverage run -m pytest && coverage report

它生成一个覆盖率为100%的报告,其中包含tests文件夹中的文件列表。

coverage run --source=src -m pytest && coverage report

上面写着

Coverage.py warning: No data was collected. (no-data-collected)
No data to report.

当我尝试在.coveragerc中给予source=srcinclude=src时,同样的警告也出现了。上述所有情况的测试均通过。
我想覆盖src文件夹。是因为我缺少一些路径设置吗?

qxsslcnc

qxsslcnc1#

coverage(由pytest-cov使用)需要tests文件夹包含__init__.py,然后才能收集任何数据。
我将__init__.py添加到tests文件夹中,然后coverage按预期收集数据。
参见http://thomas-cokelaer.info/blog/2017/01/pytest-cov-collects-no-data-on-travis/

rwqw0loc

rwqw0loc2#

我也遇到了同样的问题,问题出在我运行测试的路径上。

现在正在使用的功能:

结构

~/Projects/ProjectName
├── manage.py
├── tests
├── src
│   ├── app_one
├── .coveragerc

指令:

~/Projects/ProjectName$ coverage run manage.py test

和我的.coveragerc:

[run]
include = */src/*
omit = *migrations*, *tests*
plugins = django_coverage_plugin
lsmepo6l

lsmepo6l3#

问题是您没有指定从哪个目录获取覆盖率。
可以在.coveragerc文件或命令行中指定:

pytest tests -v --cov-report term --cov-report html:htmlcov --cov-report xml --cov-fail-under=90 --cov=<the-dir-to-colect-coverage-from>

如果需要,您可以只执行pytest tests并在项目根目录下的pytest.ini上添加pytest参数:

[pytest]
addopts = -v --cov-report term --cov-report html:htmlcov --cov-report xml --cov-fail-under=<coverage-percentage-desired> --cov=<the-dir-to-colect-coverage-from>

奖金:

如果你想忽略coverage中的文件,你可以在你的项目根目录下添加一个.coveragerc文件:

[run]
omit =
    # omit everything in the folder
    proj-ab/api/confs/
    # omit file
    proj-ab/models/file-not-covered.py

**需求:**在这些例子中,我使用了需求:pytest==4.6.2pytest-cov==2.7.1

von4xj4u

von4xj4u4#

我遇到了同样的问题,上面的答案并没有完全解决它。事实证明,你需要让__init__.py每个有测试的子目录中。

mjqavswn

mjqavswn5#

如果你需要在你的.coveragerc中使用'source',你可以写如下

[run]
source = src
omit = *migrations*, *tests*
plugins = django_coverage_plugin
6fe3ivhb

6fe3ivhb6#

我在毒理学检查中遇到了这个错误:

Coverage.py warning: No data was collected. (no-data-collected)

我的配置执行模块的安装并测试该模块,而不是测试源代码。但是,测试发现在我的应用程序包中找到了我命名为test_*.py的模块,导致PYTHONPATH混淆,并导致无法收集覆盖率详细信息。重命名模块以不以test_开头解决了该问题。

v2g6jxz6

v2g6jxz67#

我已经有了__init__.py在必要的地方。
我不知道为什么它的工作,但我只是这样做:

coverage run --omit='*/venv/*' manage.py test

然后:

coverage html

我得到了我想要的结果

6yt4nkrj

6yt4nkrj8#

我在运行pip install .时遇到了同样的问题。因为包名和代码目录具有相同的名称在当前目录中,覆盖率可能选择了目录,而运行的代码来自site-package(反之亦然)。pip install -e .确保没有混淆。

相关问题