gpt4 book ai didi

python - 毒性 0% 覆盖率

转载 作者:行者123 更新时间:2023-12-01 06:59:37 27 4
gpt4 key购买 nike

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

  • pipenv
  • 毒性
  • pytest

还有更多。

基本上,我想将 tox 添加到我的 gitlab 管道中。几乎一切似乎都有效,从 tox 调用 mypyflake8black 都可以正常工作。但是,当我在启用覆盖率的情况下调用 tox -e py37 (因此我想运行测试)时,测试将运行,我可以看到它们的结果,但覆盖率是 0% (100% 仅适用于空的 __init__ 文件等),我收到警告:Coverage.py 警告:未收集数据。 (未收集数据)

这是我的 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,其中包括所有需要的包:pytestpytest-cov以及更多样式等。(有效)。我的 tests 文件夹中还有 __init__.py

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

有办法解决吗?我不希望我的管道显示错误的覆盖范围+即使它们以某种方式神奇地实际上获得了正确的覆盖范围,我仍然希望在本地看到它。

P.S 当我尝试解决问题时,我使用 tox --sitepackages -e py37 调用 tox,并收到一些错误,例如 test command found but not in testenv 。除了这些错误之外,当时我的报道还不错。但后来我从我的全局 pip 寄存器中卸载了 toxpytestpytest-cov,现在有或没有 --sitepackages 标志我仍然获得 0% 覆盖率

最佳答案

根本原因pytest 在 runnung tox 期间使用已安装的源(在站点包下),而覆盖报告器计算命中工作目录(即本地 git 存储库)中的文件。

<小时/>

解决方案

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

[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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com