我正在尝试使用覆盖模块为django项目找到覆盖范围,但得到" Coverage.py警告:没有收集任何数据。 (无数据收集)&#34 ;.我的项目文件夹有src和测试文件夹。
当我跑步时
覆盖率运行-m pytest&&报道报道
它生成一个100%覆盖率的报告,其中包含tests文件夹中的文件列表。 而我跑的时候
覆盖率运行--source = src -m pytest&&报道报告
它说
Coverage.py警告:未收集任何数据。 (无数据收集)
没有数据需要报告。
当我尝试在.coveragerc中给出source = src或include = src时,也会发生相同的警告。上述所有情况都会通过测试。
我想要src文件夹的覆盖范围。 是因为我错过了一些路径设置吗?
答案 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.2
和pytest-cov==2.7.1
答案 5 :(得分:0)
我在用tox遇到此错误:
Coverage.py warning: No data was collected. (no-data-collected)
我的配置执行模块的安装并测试模块而不是源代码。但是,测试发现是在我的应用程序包中找到一个我命名为test_*.py
的模块,从而引起PYTHONPATH
混乱,并导致无法收集承保范围详细信息。将模块重命名为不以test_
开头可以解决该问题。