Я имею дело с проблемой покрытия генерации, которая не работает должным образом. Наконец я обнаружил, что он каким-то образом связан с пакетом 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
препятствует успешному созданию отчета.
Проверено:
- с питоном 3.8 и 3.9
- с pydevd 2.2.0 и 2.3.0
- тест 6.2.2
- pytest-ков 2.11.1