Моя команда:
Код: Выделить всё
❯ pytest --cov module1 --cov module2 --cov module3 --cov-report --cov-fail-under=75
Код: Выделить всё
FAIL Required test coverage of 75.0% not reached. Total coverage: 74.79%
Код: Выделить всё
❯ echo $?
0
Я пробовал
- передать --cov=module1,module2,module3 вместо одного вызова pytest с тремя разными аргументами --cov. Это приводит к полному сбою отчета о покрытии, поскольку в нем говорится, что CoverageWarning: Module module1,module2,module3 никогда не импортировался. То есть он пытается импортировать модуль1, модуль2, модуль3 как один модуль, но это не удается, поскольку они являются отдельными модулями.
- Передача модулей, подлежащих включению, в pyproject.toml в разделе [tool.coverage.run] в аргументе include. Проблема сохраняется: отмечен сбой порога покрытия тестами, но код выхода равен нулю.
- Интересно, что когда вы тестируете каждый из модулей по отдельности, вы получаете ненулевой код завершения для модуля со слишком низким покрытием.
- В Интернете я не могу найти работающего решения. Copilot здесь тоже не очень полезен.
Мне удалось воспроизвести ошибку. См. README репозитория.
Похоже, проблема в округлении процента покрытия тестами. Как например в моем примере порог покрытия тестами не достигнут (66,66% вместо требуемых 67%). Поэтому я справедливо вижу сообщение FAIL. Требуемый тестовый охват в 67% не достигнут. Общий охват: 66,67%. Тем не менее, код выхода, похоже, учитывает округленные процентные значения с нулевым десятичным значением тестового покрытия по сравнению с пороговым значением тестового покрытия, поскольку код выхода равен нулю.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ge-thresho
Мобильная версия