我在其中使用python项目:

  • pipenv
  • 毒素
  • pytest

  • 还有很多。

    基本上,我想将tox添加到我的gitlab管道中。几乎所有东西似乎都可以正常工作,从tox调用mypyflake8black可以正常工作。但是当我在启用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,其中包括所有必需的软件包:pytestpytest-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寄存器中卸载了toxpytestpytest-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/

    10-12 19:14