毒性0%覆盖率

2024-04-23 22:56:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python项目,我在其中使用:

  • pipenv公司
  • 毒物
  • pytest公司

还有更多。在

基本上,我想将tox添加到gitlab管道中。而且几乎所有的事情似乎都能正常工作,从tox调用mypyflake8或{}都可以。但是当我在启用覆盖率的情况下调用tox -e py37(所以我想运行测试),测试会运行,我可以看到它们的结果,但是覆盖率是0%100%只对空的__init__文件等),我得到警告:Coverage.py warning: No data was collected. (no-data-collected)。在

这是我的pytest相关部分tox.ini

[tox]
envlist = flake8,mypy,black,py37

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

这是我的.coveragerc

^{pr2}$

我有一个正在工作的setup.py,它包括所有需要的包:pytestpytest-cov以及更多的样式等(这是有效的)。我的__init__.py也在我的tests文件夹中。在

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

有办法解决吗?我不希望我的管道显示错误的覆盖率+即使他们奇迹般地得到正确的一个,我还是希望在本地看到它。在

当我试图解决这个问题时,我用tox --sitepackages -e py37调用tox,得到了一些错误,比如test command found but not in testenv。除了这些错误,我当时的报道还不错。但后来我从全局pip寄存器卸载了toxpytest和{},现在不管有没有--sitepackages标志,我仍然可以得到0%的覆盖范围


Tags: pytoxdata管道flake8initpytestpipenv
1条回答
网友
1楼 · 发布于 2024-04-23 22:56:20

根本原因是在运行期间pytest使用已安装的源(在站点包下),而coverage reporter统计工作目录(即本地git repo)中的hits文件。在


解决方案

将毒物的虚拟环境路径添加到覆盖范围:

[testenv]
pytest  cov={envsitepackagesdir}/foo

有关详细信息,请阅读substitutions for virtualenv-related sections


解决方法

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

^{pr2}$

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

相关问题 更多 >