簡體   English   中英

毒性 0% 覆蓋率

[英]Tox 0% coverage

我有一個 python 項目,我在其中使用:

  • pipenv
  • 毒素
  • pytest

還有很多。

基本上,我想將tox添加到我的 gitlab 管道中。 幾乎一切似乎都能正常工作,從 tox 調用mypyflake8black工作正常。 但是當我在啟用覆蓋的情況下調用tox -e py37 (所以我想運行測試)時,測試運行了,我可以看到它們的結果,但是覆蓋率為0%100%僅在空的__init__文件等上)並且我收到警告: Coverage.py warning: No data was collected. (no-data-collected) Coverage.py warning: No data was collected. (no-data-collected)

這是我的 tox.ini 的tox.ini相關部分:

[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

有趣的是,如果我從命令行(在tox.ini中)調用pipenv中的相同命令: pytest --cov -ra --tb=short ,我會得到相同的結果,但覆蓋范圍正常(在我的例子中它是100% )。

有辦法解決嗎? 我不希望我的管道顯示錯誤的覆蓋范圍 + 即使它們以某種方式神奇地得到正確的覆蓋范圍,我仍然希望在本地看到它。

PS 當我試圖解決我用tox --sitepackages -e py37調用 tox 的問題時,我遇到了一些錯誤,例如test command found but not in testenv 除了這些錯誤之外,我當時的報道還不錯。 但是后來我從我的全局 pip 寄存器中卸載了toxpytestpytest-cov現在無論有沒有--sitepackages標志我仍然得到0%的覆蓋率

根本原因pytest在運行tox期間使用已安裝的源(在站點包下),而覆蓋率報告者計算工作目錄中的命中文件(即您的本地 git 存儲庫)。


解決方案

將 tox 的 virtual-env 路徑添加到覆蓋范圍:

[testenv]
pytest --cov={envsitepackagesdir}/foo

有關更多詳細信息,請閱讀virtualenv 相關部分的替換


解決方法

PYTHONPATH設置為工作目錄(即export PYTHONPATH=. )。 請注意,您需要通過以下方式將PYTHONPATH傳遞給tox

[testenv]
passenv =
    PYTHONPATH

這很簡單,但是使用這種方式,您不需要測試安裝,因為測試在工作目錄中的文件上運行。

簡單的解決方案

在 tox.ini 中使用usedevelop=True

[testenv]
usedevelop=True
pytest --cov=foo

這導致與@zvi-baratz 的解決方案相同的行為,但不那么駭人聽聞。

警告

此處唯一需要注意的是,如果 package 具有自定義install_command ,則無法使用此解決方案。 請參閱文檔以獲取更多信息。

如果是這種情況,您可以使用--cov={envsitepackagesdir}/foo作為解決方法。

為什么不一直使用envsitepackagesdir

因為它會導致覆蓋率報告具有更長的路徑,這些路徑指向由 tox 創建的 python 環境中的文件,而不是實際的項目路徑。

基於@betontalpfa 的回答,我認為另一種可能的解決方案(在我的用例中似乎效果很好)是修改tox.ini以包括:

[testenv]
deps = -e .
...

AFAIK,通過使用 pip 的可編輯模式在工作目錄中安裝 package,您可以測試已安裝的 package 並避免文件路徑不匹配導致 0% 覆蓋率得分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM