Coverage.py 警告:未收集数据。 (未收集数据)

Posted

技术标签:

【中文标题】Coverage.py 警告:未收集数据。 (未收集数据)【英文标题】:Coverage.py warning: No data was collected. (no-data-collected) 【发布时间】:2018-04-27 12:23:05 【问题描述】:

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

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

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

当我跑步时

coverage run -m pytest && coverage report

它会生成一份覆盖率 100% 的报告,其中包含测试文件夹中的文件列表。 而当我跑步时

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 文件夹的覆盖范围。 是因为我缺少一些路径设置吗?

【问题讨论】:

也许您没有运行 src 文件夹中的代码?将 --debug=trace 添加到覆盖运行行。它将打印有关每个执行文件的信息,是否被跟踪,如果没有,为什么不跟踪。 尝试将 src 替换为实际路径。它应该指向一个文件夹而不是一个文件 【参考方案1】:

我在使用 tox 时遇到了这个错误:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

coverage(由pytest-cov 使用)需要测试文件夹包含__init__.py,然后才能收集任何数据。

我将__init__.py 添加到测试文件夹中,然后覆盖按预期收集数据。

参考http://thomas-cokelaer.info/blog/2017/01/pytest-cov-collects-no-data-on-travis/

【讨论】:

从赞成票来看,这似乎是一些人的解决方案,但在我的情况下,pytest-cov 工作得很好,我的__init__.py 文件夹中没有__init__.py 文件。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

问题是您没有指定从哪个目录获取覆盖率。

您可以在.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>

奖励:

如果您想从覆盖范围中省略文件,您可以在项目根目录中添加.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

【讨论】:

我发现这条评论对我来说很有用,因为我正在寻找解决我在单元测试中使用 pytest-cov 的方法。谢谢!【参考方案6】:

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

现在的工作方式:

结构

~/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

【讨论】:

.coveragerc 文件在哪里? 在 ProjectName 文件夹中...将更新上面的结构 你现在在哪里运行 pytest? 什么是manage.py?

以上是关于Coverage.py 警告:未收集数据。 (未收集数据)的主要内容,如果未能解决你的问题,请参考以下文章

coverage.py:排除文件

如果 py.test 从另一个目录执行它,coverage.py 不会覆盖脚本

从 coverage.py 运行测试与从测试运行器运行覆盖

Coverage.py 不会发现子目录中没有 init.py 文件的测试

是否可以从 coverage.py 报告中排除测试目录?

如何解释 Python coverage.py 分支覆盖结果?