Ответ
В 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.