Pytest-cov показывает 0% или низкое покрытие для тестируемого модуля – каталог против явных файловPython

Программы на Python
Ответить
Anonymous
 Pytest-cov показывает 0% или низкое покрытие для тестируемого модуля – каталог против явных файлов

Сообщение Anonymous »

Просто потратил несколько часов на отладку неприятной проблемы с pytest-cov и хотел поделиться тем, что нашел, поскольку нигде не смог найти документального подтверждения этого конкретного случая.
Выполнение тестов pytest/ --cov=mypackage показало 29%-ное покрытие модуля, которое должно было быть 100%. И запуск тестов только для этого конкретного модуля показал 100%-ное покрытие.
При запуске:
pytesttests/ --cov=mypackage
  • pytest обрабатывает тесты в другом порядке, чем при явном перечислении файлов:
    pytesttest/test_auth.pytests/test_other.py --cov=mypackage
В моем случае какой-то ранний тестовый файл приводил к импорту моего целевого модуля до того, как началось измерение покрытия. Модуль был зарегистрирован с 0 строками, и при последующих запусках реальных тестов покрытие не было повторно измерено.
Вместо:
pytesttests/ --cov=mypackage
Используйте явный список файлов:
pytesttest/test_target.pytests/test_other.pytests/subdir/ --cov=mypackage
Поместите тесты для наиболее важных целей покрытия ПЕРВЫМИ в списке.
Когда вы указываете файлы явно:
  • pytest обрабатывает их в ВАШЕМ порядке
  • Целевой модуль импортируется во время собственных тестов (с активным покрытием)
Когда pytest обнаруживает через каталог:
  • Он обрабатывается в в своем собственном порядке (часто в алфавитном порядке).
  • Некоторые несвязанные тесты могут вызвать импорт вашего модуля.
  • Покрытие видит модуль, но с 0 выполненными строками.
  • Последующие тесты выполняют код, но покрытие уже «видел» модуль.
Если вы подозреваете эту проблему, попробуйте:
coverage run -m pytest tests/test_target.pytests/test_other.py
отчет о покрытии
по сравнению с этим:
coverage run -m pytesttests/
отчет о покрытии
Если первый показывает более высокий охват, вы столкнулись с этой ошибкой.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ctory-vs-e
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»