我正在处理一个不能按预期工作的代覆盖问题。最后我发现它以某种方式连接到pydevd(PyDev 调试器)包。
要重现我的问题,您可以使用以下 repo:cov-project
只有两个文件。一my_package
进
import pydevd # Just for the purpose to show the problem
def sum(num1, num2):
return num1 + num2
def mult(num1, num2):
return num1 * num2
以及测试中的测试文件test_math.py
:
from my_package.math import sum, mult
def test_sum():
assert sum(1, 2) == 3
def test_mult():
assert mult(2, 3) == 6
当我import pydevd
从第一个文件中删除并运行时,python -m pytest --cov=my_package tests
我得到以下输出:
Name Stmts Miss Cover
--------------------------------------------
my_package/__init__.py 0 0 100%
my_package/math.py 4 0 100%
--------------------------------------------
TOTAL 4 0 100%
是的,100% 的覆盖率符合预期。但是当我运行相同并继续导入时,pydevd
我得到:
Name Stmts Miss Cover
--------------------------------------------
my_package/__init__.py 0 0 100%
my_package/math.py 5 4 20%
--------------------------------------------
TOTAL 5 4 20%
测试完全一样,唯一的变化是这个额外的导入。当然,在这个设置pydevd
中是未使用的,我可以简单地删除它。但我在我的专有代码中使用它,所以我想展示如何重现我的错误的最简单方法,因为在使用pydevd
. 我可以将其更改为本地导入,因为我不在我的测试中使用它,然后它会起作用,但我试图了解这里发生了什么以及为什么会pydevd
阻止成功生成报告的覆盖率。
测试:
- 使用 python 3.8 和 3.9
- 使用 pydevd 2.2.0 和 2.3.0
- pytest 6.2.2
- pytest-cov 2.11.1