我有一个python项目,我在其中使用:
还有更多。在
基本上,我想将tox
添加到gitlab管道中。而且几乎所有的事情似乎都能正常工作,从tox调用mypy
、flake8
或{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
:
我有一个正在工作的setup.py
,它包括所有需要的包:pytest
,pytest-cov
以及更多的样式等(这是有效的)。我的__init__.py
也在我的tests
文件夹中。在
有趣的是,如果我从命令行中调用tox.ini
中的同一个命令:pipenv
:pytest --cov -ra --tb=short
,我得到的结果是相同的,但是覆盖率正常(在我的例子中是100%
)。在
有办法解决吗?我不希望我的管道显示错误的覆盖率+即使他们奇迹般地得到正确的一个,我还是希望在本地看到它。在
当我试图解决这个问题时,我用tox --sitepackages -e py37
调用tox,得到了一些错误,比如test command found but not in testenv
。除了这些错误,我当时的报道还不错。但后来我从全局pip寄存器卸载了tox
、pytest
和{--sitepackages
标志,我仍然可以得到0%
的覆盖范围
根本原因是在运行期间
pytest
使用已安装的源(在站点包下),而coverage reporter统计工作目录(即本地git repo)中的hits文件。在解决方案
将毒物的虚拟环境路径添加到覆盖范围:
有关详细信息,请阅读substitutions for virtualenv-related sections
解决方法
将
^{pr2}$PYTHONPATH
设置为工作目录(即export PYTHONPATH=.
)。请注意,您需要通过以下方式将PYTHONPATH
传递给tox
:这很简单,但是使用这种方法,您不会测试安装,因为测试运行在工作目录中的文件上。在
相关问题 更多 >
编程相关推荐