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

101*_*101 15 python django coverage.py pytest test-coverage

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

我跑的时候

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

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

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

它说

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

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

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

lou*_*ton 15

coverage(由pytest-cov__init__.py在收集任何数据之前需要测试文件夹包含一个。

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

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

  • 从赞成票来看,这似乎是某些人的解决方案,但就我而言, pytest-cov 在我的“tests”文件夹中没有“__init__.py”文件的情况下工作得很好。 (18认同)
  • 这取决于您的包装布局。常见的做法是将测试保留在应用程序代码之外,在这种情况下,您不希望测试目录中存在“__init__.py”文件。如果您对测试模块使用相同的名称或进行“内联”测试,那么您需要在测试目录中放置 `__init__.py` 文件(请参阅 [pytest 最佳实践](https://docs.pytest.org/en) /7.1.x/explanation/goodpractices.html#tests-outside-application-code))。 (2认同)

Rob*_* Yi 8

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


Nad*_*dav 7

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

现在正在做什么:

结构体

~/Projects/ProjectName
??? manage.py
??? tests
??? src
?   ??? app_one
??? .coveragerc
Run Code Online (Sandbox Code Playgroud)

命令:

~/Projects/ProjectName$ coverage run manage.py test
Run Code Online (Sandbox Code Playgroud)

和我的.coveragerc:

[run]
include = */src/*
omit = *migrations*, *tests*
plugins = django_coverage_plugin
Run Code Online (Sandbox Code Playgroud)


Luc*_*eca 6

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

您可以在.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>
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您只能在项目根目录上执行pytest tests和添加pytest参数pytest.ini

[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>
Run Code Online (Sandbox Code Playgroud)

奖金:

如果您想从覆盖范围中省略文件,您可以.coveragerc在项目根目录中添加一个文件:

[run]
omit =
    # omit everything in the folder
    proj-ab/api/confs/
    # omit file
    proj-ab/models/file-not-covered.py
Run Code Online (Sandbox Code Playgroud)

要求: 在这些示例中,我使用了要求:pytest==4.6.2pytest-cov==2.7.1