Средний ~20 мин чтения

Тесты в CI/CD: автоматизация качества

Урок 5 из 5 в курсе Тестирование backend-приложений

Тесты в CI/CD: автоматизация качества

CI/CD-пайплайн запускает тесты автоматически при каждом коммите; без этого тесты быстро перестают запускаться

Почему это важно: тесты ценны только если они запускаются. CI обеспечивает обязательный прогон; упавший тест блокирует деплой

Главная идея

pipeline: commit → lint → unit tests → integration tests → build → deploy. Каждый этап — gate; падение останавливает pipeline

Как это выглядит на практике

  1. push в ветку → GitHub Actions/GitLab CI запускает pipeline.
  2. Этап 1: rspec --format progress (unit + integration) за 2-5 минут.
  3. Этап 2: сборка Docker-образа и smoke tests.
  4. PR не мержится пока все проверки не зелёные — branch protection rules.
  5. Ежедневный полный прогон включая e2e и performance тесты.

Что происходит под капотом

  • Параллельные задачи: unit и lint параллельно; интеграционные после unit.
  • Test sharding: разбиваем тесты на N параллельных runner'ов для ускорения.
  • Artifacts: сохраняем coverage report, test logs после прогона.
  • Caching: кэшируем зависимости (bundle cache, pip cache) между прогонами.
  • Flaky test detection: отслеживаем тесты с нестабильным результатом; помечаем и чиним.

Типичные ошибки и заблуждения

  • Ошибка: медленный CI — нормально. > 10 минут = разработчики обходят CI. Цель: < 5 минут для unit/integration.
  • Ошибка: тесты в CI можно не запускать локально. Быстрый локальный прогон обязателен для нормального workflow.
  • Ошибка: coverage badge = качественные тесты. Это ванильная метрика; важнее — падают ли тесты при реальных багах.
  • Ошибка: один падающий тест можно игнорировать. Один постоянно красный тест нормализует игнорирование красного — опасная культура.

Ключевые выводы

  • CI делает тесты обязательными, а не опциональными.
  • Branch protection: PR не мержится без зелёного CI.
  • Быстрый pipeline = частые прогоны = быстрый feedback.
  • Flaky тесты чинятся немедленно, не откладываются.

Термины урока

CI (Continuous Integration): автоматический запуск тестов при интеграции кода.
Pipeline: последовательность автоматических этапов: тесты, сборка, деплой.
Branch protection: правило, запрещающее merge при непрошедших проверках.
Test sharding: параллельное выполнение тестов на нескольких машинах.
Flaky test: нестабильный тест с непредсказуемым результатом.

Связь с работой backend-разработчика

Минимальный CI для backend: lint + unit tests + integration tests за < 5 минут. Branch protection на main. coverage report в PR. Это не bureaucracy — это инфраструктура качества.

Мини-разбор реальной ситуации

Команда отключила failing тест 'временно', не починив. За месяц накопилось 12 игнорируемых тестов. При major рефакторинге оказалось, что половина из них покрывала реальные баги. Политика: красный тест чинится в течение 24 часов или revertiruetsya код, его сломавший.

Что запомнить

  • CI — это enforcement: тесты запускаются всегда, не когда вспомнили.
  • Красный тест = стоп. Не мержим, не игнорируем.
  • Цель: < 5 минут для полного прогона unit + integration.

Итог

CI/CD превращает тесты из доброй воли в инфраструктурное требование. Без автоматизации тесты деградируют; с ней — они становятся живым стандартом качества.