我在其中使用python项目:
还有很多。
基本上,我想将
tox
添加到我的gitlab管道中。几乎所有东西似乎都可以正常工作,从tox调用mypy
,flake8
或black
可以正常工作。但是当我在启用coverage的情况下调用tox -e py37
(所以我想运行测试)时,测试就运行了,我可以看到它们的结果,但是覆盖率是0%
(仅在空的100%
文件上是__init__
等),并且收到警告: Coverage.py warning: No data was collected. (no-data-collected)
。这是
tox.ini
的与pytest相关的部分:[tox]
envlist = flake8,mypy,black,py37
[testenv]
extras = tests
commands=
pytest --cov -ra --tb=short {posargs}
这是我的
.coveragerc
:[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
,其中包括所有必需的软件包:pytest
,pytest-cov
以及用于样式等的更多软件包(有效)。我的__init__.py
文件夹中也有tests
。有趣的是,如果我从命令行(在
tox.ini
中)在pipenv
中调用了与我相同的命令:pytest --cov -ra --tb=short
,则得到的结果相同,但覆盖范围正常(在我的情况下为100%
)。有办法解决吗?我不希望我的管道显示错误的覆盖范围,即使它们确实以某种方式神奇地得到了正确的覆盖范围,我仍然希望在本地看到它。
P.S当我尝试解决此问题时,我用
tox --sitepackages -e py37
调用了tox,但出现了test command found but not in testenv
之类的错误。除了这些错误之外,我的报道还不错。但是后来我从全局pip寄存器中卸载了tox
,pytest
和pytest-cov
,现在无论是否带有--sitepackages
标志,我仍然可以覆盖0%
最佳答案
根本原因是runtung pytest
期间的tox
使用已安装的源(在站点程序包下),而Coverage Reporter则在工作目录(即您的本地git repo)中对点击文件进行计数。
解决方案
将Tox的virtual-env路径添加到coverage中:[testenv]
pytest --cov={envsitepackagesdir}/foo
有关更多详细信息,请阅读substitutions for virtualenv-related sections
解决方法
将PYTHONPATH
设置为工作目录(即export PYTHONPATH=.
)。请注意,您需要通过以下方式将PYTHONPATH
传递给tox
:[testenv]
passenv =
PYTHONPATH
这很容易,但是使用这种方式,您无需测试安装,因为测试是在工作目录中的文件上运行的。
关于python - 毒0%覆盖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58696476/