当前位置: 首页 > 知识库问答 >
问题:

为什么大多数项目的Django文件从PyTest覆盖率报告中丢失?

督烨赫
2023-03-14

我正在运行pytestcovpytestdjango使用tox。我有一个非常简单的tox。ini文件,包含有限的忽略文件。问题是,当我使用tox-e单元运行pytest时,我会得到一个有限的覆盖率报告:

---------- coverage: platform darwin, python 3.7.4-final-0 -----------
Name                                           Stmts   Miss  Cover   Missing
----------------------------------------------------------------------------
components/__init__.py                             0      0   100%
components/client/__init__.py                      0      0   100%
components/client/admin.py                        27      0   100%
components/client/factories.py                    57      0   100%
components/client/models.py                       62      0   100%
components/controller/__init__.py                  0      0   100%
components/controller/admin.py                    62      6    90%   96-97, 109-110, 122-123
components/controller/management/__init__.py       0      0   100%
components/controller/models.py                  107      6    94%   19, 31, 54, 92, 105, 132
components/personal/__init__.py                    0      0   100%
components/personal/admin.py                      24      0   100%
components/personal/factories.py                  39      0   100%
components/personal/models.py                     81     16    80%   23, 36, 49, 62, 72, 75-76, 92-104
server/__init__.py                                 3      0   100%
server/celery.py                                  10      1    90%   30
server/config/__init__.py                          1      0   100%
server/settings.py                                52      0   100%
server/test.py                                    56     33    41%   16-19, 43, 48-49, 63-88, 94-105, 112-115
----------------------------------------------------------------------------
TOTAL                                            589     62    89%

我在组件下的所有Django应用程序都有许多应该在报告中涵盖的文件,包括应用程序序列化器信号网址视图(标准Django结构)。有人知道我错过了什么吗?我在tox.ini中得到的一切似乎都非常符合我在pytestpytest-djangopytest-cov覆盖率的各种留档中读到的内容,但我一定错过了什么重要的东西!

毒素。ini

[tox]
; The only reason we'd want to `sdist` is if we distributed this as a Python package in PyPI, so let's skip it:
skipsdist = True
envlist =
    {py37}-django{2}
    lint
skip_missing_interpreters = true

[testenv]
whitelist_externals = *
passenv = *
deps = -rrequirements-test.txt
commands = {[testenv:unit]commands}

[testenv:unit]
deps = {[testenv]deps}
commands = pytest {posargs:--cov=project-name}


[pytest]
DJANGO_SETTINGS_MODULE = server.settings
python_files = tests.py test_*.py *_tests.py
addopts =
    -v -s
    --color=yes
    --cov
    --cov-append
    --cov-report=term-missing
    --cov-config=tox.ini


[coverage:report]
show_missing = True
omit =
    */usr/*
    */.tox/*py
    */.virtualenvs/*
    */migrations/*
    */tests/*

[report]
omit =
    */usr/*
    */.tox/*
    */migrations/*
    */tests/*

共有2个答案

邓仲卿
2023-03-14

根据Coverage.py留档:

只有可导入的文件(位于树的根部,或具有__init__. py文件的目录中的文件)将被考虑。来源

因此,您必须确保代码由测试执行,或者确保代码所在的目录具有\uuuu init\uuuu。py

马清野
2023-03-14

答案似乎非常琐碎和明显,但令人惊讶的是,这是很难得到的<代码>覆盖率仅报告实际运行的代码。因此,如果您的测试没有调用一点代码,并且在应用程序的正常加载过程中它没有运行,coverage将不会显示该代码的报告。未运行的代码不会导致错误:)

 类似资料:
  • 我正在设置通过SonarQube服务器分析项目。使用的工具集是: Kotlin 1.3.61 Gradle 6.0.1 Jacoco 0.7.9 SonarQube 7.5 SonnarQube Gradle插件2.7 问题是,我在SonarQube中有0.0%的覆盖率,但同时我有一份格式良好的jacoco测试覆盖率报告。以下是中的片段: 在执行< code >期间,我有下一个日志条目。/grad

  • 我一直试图从生成的覆盖报告中删除某些文件。我尝试了以下事情: 修改代码: 也试过, 我试图找到解决方案时提到的许多链接中的一些: Maven Jacoco配置-从不工作的报告中排除类/包 Jacoco如何正确排除包 如何在子项目中添加更多Jacoco排除? http://tdongsi.github.io/blog/2017/09/23/jacoco-in-maven-project/ 但是每次我

  • 我有一个在相当大的django项目上使用Pytest的工作测试套件。问题是我无法实现适当的结果使用覆盖,我想知道这是否可能是因为项目目录结构。 考虑以下目录树示例: 以及覆盖报告的示例输出: 查看html报告,我可以看到许多由测试执行的语句没有被认为是覆盖的,尽管它们应该被覆盖。我认为这个覆盖数据是不完整的,它似乎只考虑了导入、定义和文档字符串作为覆盖。 无法确定覆盖率出现错误的原因,我尝试运行单

  • 当使用 生成覆盖率报告后,我的测试在代码覆盖率报告中显示为100%覆盖,如下所示 我尝试将测试移动到它自己的文件夹中,但仍然会得到相同的结果 实际的单元测试不应该出现在覆盖率报告中,并且扭曲了我的覆盖率。它应该只显示实际程序的覆盖范围。

  • Jacoco代码覆盖率报告还包括“系统路径jar”中的类,我在maven依赖项下面添加了这些类 我试图排除这个罐子的文件从Jacoco插件像这样: 但这种排斥并不奏效。它仍在显示jar中包含的文件的覆盖率报告。如图所示,文件位于org中。阿帕克。和组织。克洛布斯。报道中不应该有包裹。

  • 我正在更新一个继承的存储库,它的测试覆盖率很差。回购本身是一个pytest插件。我已经改变了回购使用随着,并转换原始测试使用作为测试插件时pytest留档建议。 测试和毒物构建等。工作得很好。然而,覆盖是报告错误的错失,例如类定义、导入等。这是因为代码本身作为pytest实例化的一部分被导入,直到测试真正开始才被“覆盖”。 我已经阅读了pytest文档、pytest cov和coverage文档以