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

时间:2017-11-14 14:00:39

标签: python django pytest coverage.py test-coverage

我正在尝试使用覆盖模块为django项目找到覆盖范围,但得到" Coverage.py警告:没有收集任何数据。 (无数据收集)&#34 ;.我的项目文件夹有src和测试文件夹。

当我跑步时

  

覆盖率运行-m pytest&&报道报道

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

  

覆盖率运行--source = src -m pytest&&报道报告

它说

  

Coverage.py警告:未收集任何数据。 (无数据收集)
  没有数据需要报告。

当我尝试在.coveragerc中给出source = src或include = src时,也会发生相同的警告。上述所有情况都会通过测试。

我想要src文件夹的覆盖范围。 是因为我错过了一些路径设置吗?

6 个答案:

答案 0 :(得分:9)

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

我在测试文件夹中添加了__init__.py,然后Coverage按预期收集了数据。

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

答案 1 :(得分:2)

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

现在正在做什么:

结构

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

答案 2 :(得分:2)

我遇到了同样的问题,以上答案并未完全解决。事实证明,您需要让__init__.py位于进行测试的每个子目录中。

答案 3 :(得分:0)

如果您需要使用“源代码”,则可以编写如下内容

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

答案 4 :(得分:0)

问题是您没有指定要获取覆盖的目录。

您可以在.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的项目根目录上添加pytest.ini args:

[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

答案 5 :(得分:0)

我在用tox遇到此错误:

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

我的配置执行模块的安装并测试模块而不是源代码。但是,测试发现是在我的应用程序包中找到一个我命名为test_*.py的模块,从而引起PYTHONPATH混乱,并导致无法收集承保范围详细信息。将模块重命名为不以test_开头可以解决该问题。