【问题标题】:Coverage.py warning: No data was collected. (no-data-collected)Coverage.py 警告:未收集数据。 (未收集数据)
【发布时间】: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 替换为实际路径。它应该指向一个文件夹而不是一个文件

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


【解决方案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?
        猜你喜欢
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        • 2014-08-11
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        相关资源
        最近更新 更多