首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tox 0%覆盖率

Tox 0%覆盖率
EN

Stack Overflow用户
提问于 2019-11-04 15:28:50
回答 3查看 2.7K关注 0票数 13

我有一个python项目,我使用:

  • 琵琶
  • 毒理
  • 吡喃

还有更多。

基本上,我想将tox添加到我的gitlab管道中。而且几乎所有的事情似乎都正常,打电话给mypyflake8black都很好。但是,当我调用tox -e py37 (所以我想要运行测试)并且启用覆盖时,测试就会运行,我可以看到它们的结果,但是覆盖率是0% (仅对空的__init__文件等等)。我收到警告:Coverage.py warning: No data was collected. (no-data-collected)

这是我与tox.ini相关的最热的部分

代码语言:javascript
复制
[tox]
envlist = flake8,mypy,black,py37

[testenv]
extras = tests
commands=
    pytest --cov -ra --tb=short {posargs}

这是我的.coveragerc

代码语言:javascript
复制
[run]
branch = True
source =
    foo

omit = 
    foo/__init__.py
    foo/__main__.py
    foo/bar/__init__.py
    foo/baz/__init__.py

[report]
exclude_lines =
    pragma: no cover
    if __name__ == .__main__.
show_missing = True

我有一个工作的setup.py,它包括所有需要的包:pytestpytest-cov和更多的样式等等。我的__init__.py文件夹中也有tests

有趣的是,如果我从命令行(在pipenv中)调用pipenv中相同的命令:pytest --cov -ra --tb=short,则得到相同的结果,但具有正常的覆盖率(在我的例子中是100%)。

有办法解决吗?我不想让我的管道显示错误的报道,即使它们神奇地得到了正确的报道,我还是想在本地看到它。

当我试图解决这个问题时,我用tox --sitepackages -e py37打电话给毒理科,发现了一些像test command found but not in testenv这样的错误。除了这些错误,我当时的报道也很好。但是后来我从我的全局pip寄存器中卸载了toxpytestpytest-cov,现在不管有没有--sitepackages标志,我仍然可以获得0%覆盖率。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-27 14:07:19

,根本原因是,运行期间的pytest使用已安装的源代码(在站点包下),而覆盖率报告者则计算工作目录中的命中文件(即。你当地的git回购)。

溶液

将tox的虚拟env路径添加到覆盖率中:

代码语言:javascript
复制
[testenv]
pytest --cov={envsitepackagesdir}/foo

欲了解更多细节,请阅读虚拟环境相关部分的替换

工作-周密

PYTHONPATH设置为工作目录(即。export PYTHONPATH=.)。注意,您需要通过以下方式将PYTHONPATH传递给tox

代码语言:javascript
复制
[testenv]
passenv =
    PYTHONPATH

这很容易,但是使用这种方式,您不会测试安装,因为测试运行在工作目录中的文件上。

票数 17
EN

Stack Overflow用户

发布于 2021-10-06 09:17:20

平凡解

usedevelop=True在tox.ini中:

代码语言:javascript
复制
[testenv]
usedevelop=True
pytest --cov=foo

这会导致与@zvi-baratz的解决方案相同的行为,但不那么烦躁。

警告

这里唯一的警告是,如果包具有自定义install_command,则不能使用该解决方案。有关更多信息,请查看文档

如果是这样的话,您可以使用--cov={envsitepackagesdir}/foo作为一个工作-绕过

为什么不一直使用envsitepackagesdir呢?

因为它导致覆盖率报告具有更长的路径,指向由tox创建的python环境中的文件,而不是实际的项目路径。

票数 4
EN

Stack Overflow用户

发布于 2021-06-08 15:31:34

基于@betontalpfa的回答,我认为另一个可能的解决方案(在我的用例中似乎很有效)是修改tox.ini以包括:

代码语言:javascript
复制
[testenv]
deps = -e .
...

AFAIK,通过使用pip的可编辑模式在工作目录中安装包,您可以测试已安装的包并避免文件路径不匹配导致0%的覆盖率评分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58696476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档