PyDevD 阻止 pytest 正确生成覆盖率
PyDevD is preventing pytest to correctly generate coverage
我正在处理无法按预期工作的生成覆盖问题。最后我发现它以某种方式连接到 pydevd (PyDev 调试器)包。
要重现我的问题,您可以使用以下存储库: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
这确实是 pydevd
中的一个错误。
我已经在 https://github.com/fabioz/PyDev.Debugger/commit/be32cd821f2574566385deeec23081365bf16722
中修复了它
您可以同时对您的本地版本应用相同的修复程序。
要找出修复文件,您可以执行以下操作:
import pydevd
from _pydevd_bundle import pydevd_constants
print(pydevd_constants.__file__)
我正在处理无法按预期工作的生成覆盖问题。最后我发现它以某种方式连接到 pydevd (PyDev 调试器)包。
要重现我的问题,您可以使用以下存储库: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
这确实是 pydevd
中的一个错误。
我已经在 https://github.com/fabioz/PyDev.Debugger/commit/be32cd821f2574566385deeec23081365bf16722
中修复了它您可以同时对您的本地版本应用相同的修复程序。
要找出修复文件,您可以执行以下操作:
import pydevd
from _pydevd_bundle import pydevd_constants
print(pydevd_constants.__file__)