Ответ
В Python для измерения покрытия кода (code coverage) чаще всего используется библиотека coverage.py
. Она помогает определить, какие части кода были выполнены во время выполнения тестов, а какие остались нетронутыми.
Почему это важно? Покрытие кода позволяет выявить непротестированные участки, что снижает риск ошибок в продакшене и улучшает качество кода.
Пример использования coverage.py
:
-
Установка:
pip install coverage pytest
-
Запуск тестов с измерением покрытия:
coverage run -m pytest tests/
Эта команда запускает тесты (например, с
pytest
) и одновременно собирает данные о покрытии. -
Генерация отчета:
- Консольный отчет:
coverage report -m
Показывает процент покрытия для каждого файла и список непрокрытых строк.
- HTML-отчет:
coverage html
Создает интерактивный HTML-отчет в папке
htmlcov/
, где можно детально просмотреть покрытие по файлам и строкам.
- Консольный отчет:
Основные метрики покрытия:
- Statement Coverage (Покрытие операторов): Процент выполненных исполняемых строк кода.
- Branch Coverage (Покрытие ветвлений): Процент выполненных условных ветвлений (например,
if/else
,while
). - Function/Method Coverage (Покрытие функций/методов): Процент вызванных функций или методов.
Нюансы и лучшие практики:
- 100% покрытие не гарантирует отсутствие багов. Оно лишь показывает, что код был выполнен, но не проверяет корректность его логики или все возможные входные данные.
- Сочетайте с другими метриками качества: Покрытие кода должно использоваться в комбинации с юнит-тестами, интеграционными тестами, линтингом и статическим анализом.
- Интеграция в CI/CD:
coverage.py
легко интегрируется в системы непрерывной интеграции. Отчеты можно экспортировать в форматыxml
илиjson
для использования с сервисами вроде Codecov или SonarQube.