Изучение покрытия кода в Python

Введение

В динамичном мире разработки программного обеспечения гарантирование качества и надежности кода имеет первостепенное значение. Одним из важнейших аспектов является покрытие кода – метрика, которая помогает разработчикам понять, какая часть их кода покрыта тестами. На языке Python такие инструменты, как coverage.py и pytest играют ключевую роль в создании информативных отчетов о покрытии кода. В этой статье мы подробно рассмотрим использование этих инструментов для покрытия кода как по операторам (отдельные команды или выражения в коде), так и по ветвям (разветвленные части кода, где выполняется различный блок кода в зависимости от условия), а также их интеграцию в непрерывные рабочие процессы (CI) GitLab.

Понимание покрытия кода

Покрытие кода – это важный показатель в тестировании программного обеспечения, который измеряет, насколько большая часть вашей кодовой базы покрыта тестами. Оно бывает двух основных видов: покрытие операторов, которое проверяет, выполняется ли каждая строка кода, и покрытие ветвей, которое гарантирует, что протестированы все возможные пути выполнения кода (например, условия if-else). Отчеты о покрытии жизненно важны для поддержания высокого качества кода, поскольку они выявляют непротестированные или потенциально рискованные области в вашем коде.

Начало работы с Coverage.py и Pytest

Прежде чем погружаться в отчеты о покрытии, необходимо настроить ваше рабочее окружение. После установки coverage.py (для установки выполните команду: pip install coverage в интерфейсе командной строки) и pytest (для установки выполните команду: pip install pytest в интерфейсе командной строки), вы можете начать генерировать отчеты о покрытии кода. Например, используйте следующую команду в интерфейсе командной строки (CLI) для запуска тестов с покрытием:

coverage run -m pytest

Эта команда указывает coverage.py на отслеживание кода, используемого во время выполнения ваших тестов.

Глубокий анализ отчетов о покрытии

После выполнения тестов  coverage.py создает  файл.coverage, содержащий необработанные данные о покрытии. Для представления этой информации в удобной форме вы создаете отчет, часто в формате HTML, который сохраняется в htmlcov каталоге:

coverage html

Эта команда преобразует исходные данные в интуитивно понятный HTML-отчет, позволяющий легко выявить непротестированные участки кода.

Если вы хотите только вывести отчет о покрытии в интерфейсе командной строки, а не генерировать HTML-отчет, вы можете выполнить следующую команду coverage report .

Интеграция отчетов о покрытии в GitLab CI

Непрерывная интеграция (CI) играет важнейшую роль в современной разработке программного обеспечения, автоматизируя тестирование и развертывание кода (процесс размещения и запуска кода в рабочей среде). GitLab CI является популярным выбором для этого. Интеграция coverage.py и pytest в GitLab CI начинается с настройки файла.gitlab-ci.yml в корневом каталоге вашего проекта. Этот файл определяет конфигурацию CI-процесса.

pytest:
  stage: test
  script:
    - coverage run -m pytest
    - coverage html
  artifacts:
    paths:
      - htmlcov/
      - .coverage

Эта конфигурация запускает ваши тесты с использованием покрытия кода и генерирует HTML-отчет, рассматривая и отчет, и необработанные данные о покрытии как артефакты.

Сохранение отчетов о покрытии в качестве артефактов в GitLab CI

В GitLab CI артефакты – это файлы и каталоги, созданные в ходе выполнения этапов сборки. Указав .coverage и htmlcov/ в качестве артефактов, эти файлы сохраняются и могут быть доступны после завершения процесса сборки. Такой подход очень важен для отслеживания тенденций покрытия кода и выявления областей, требующих улучшения с течением времени.

Контроль покрытия в непрерывной интеграции (CI)

Одной из продвинутых возможностей использования оценки покрытия в непрерывной интеграции (CI) является установка минимальных порогов уровня покрытия. GitLab CI можно настроить так, чтобы сборка не выполнялась, если уровень покрытия опускается ниже определенного процента. Это можно сделать, добавив команду проверки покрытия в файл.gitlab-ci.yml:

test:
  script:
    - coverage run -m pytest
    - coverage report --fail-under=80

Эта конфигурация приводит к сбою процесса, если общее покрытие падает ниже 80 %.

Рекомендации и советы

Чтобы поддерживать высокий уровень покрытия кода, необходимо писать тесты параллельно с написанием кода и регулярно просматривать отчеты о покрытии кода. Избегайте распространенной ловушки – стремления к 100-процентному покрытию в ущерб качеству тестов. Сосредоточьтесь на критических и сложных частях вашего кода.

Использование таких методологий написания кода, как TDD (“Test-Driven Development” – разработка через тестирование), также позволяет обеспечить 100-процентное покрытие тестами по мере создания кода. Это также гарантирует, что написанный код легко тестируем.

Заключение

Интеграция coverage.py и pytest в ваш рабочий процесс разработки на Python, особенно в среде CI, такой как GitLab, является надежной стратегией для обеспечения высокого качества кода. Понимая и используя отчеты о покрытии, а также применяя стандарты покрытия в CI, разработчики могут значительно повысить надежность и поддерживаемость своего кода.

Перевод статьи «Mastering Code Coverage in Python».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *