将 pytest 覆盖率和 codecov.io 与 Python 结合使用

Rob*_*ong 2 python coverage.py codecov

当我运行 pytest --cov 时,我得到的覆盖率值为 ~60%。代码推送到github后在codecov.io上生成的报告显示为100%。我无法理解两者有何不同,我认为正在运行相同的命令。

\n\n

Codecov.io 显示

\n\n
Files       \xe2\x80\xa2   \xe2\x80\xa2   \xe2\x80\xa2   Coverage\n __init__.py    2   2   0   0   100.00%\n c_wrapper.py   5   5   0   0   100.00%\n fibonacci.py   13  13  0   0   100.00%\n tests/test_fibonnaci.py    39  39  0   0   100.00%\nFolder Totals (4 files) 59  59  0   0   100.00%\nProject Totals (4 files)    59  59  0   0   100.00%\n
Run Code Online (Sandbox Code Playgroud)\n\n

但运行

\n\n
pytest --cov=fibonacci fibonacci/tests\n
Run Code Online (Sandbox Code Playgroud)\n\n

节目

\n\n
----------- coverage: platform linux, python 3.7.4-final-0 -----------\nName                                Stmts   Miss Branch BrPart  Cover\n---------------------------------------------------------------------\nfibonacci/__init__.py                   2      2      0      0     0%\nfibonacci/c_wrapper.py                  5      5      0      0     0%\nfibonacci/fibonacci.py                 13     13      6      0     0%\nfibonacci/tests/test_fibonnaci.py      39      0      0      0   100%\n---------------------------------------------------------------------\nTOTAL                                  59     20      6      0    60%\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

差异从何而来,哪个是正确的?

\n

Pau*_*ues 5

pytest 正如您在文档中看到的使用差异:

python -m pytest [...]
Run Code Online (Sandbox Code Playgroud)

pytest [...]
Run Code Online (Sandbox Code Playgroud)

是“调用viapython也会将当前目录添加到sys.path.”

这可能是覆盖范围的差异。但是,我相信其他插件在 pytest-cov 之前被调用。

Pytest 有一个早期加载参数-p,强制该插件在任何其他插件之前被调用。

下面的命令可以解决封面问题。

pytest -p pytest_cov --cov
Run Code Online (Sandbox Code Playgroud)

另外,对于测试,您可以尝试运行以下命令来检查哪些行未被覆盖并比较两者:

pytest --cov-report term-missing --cov
python -m pytest --cov-report term-missing --cov
Run Code Online (Sandbox Code Playgroud)