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=src
或include=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.2
和 pytest-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 警告:未收集数据。 (未收集数据)的主要内容,如果未能解决你的问题,请参考以下文章
如果 py.test 从另一个目录执行它,coverage.py 不会覆盖脚本