Тесты в CI/CD: автоматизация качества
CI/CD-пайплайн запускает тесты автоматически при каждом коммите; без этого тесты быстро перестают запускаться
Почему это важно: тесты ценны только если они запускаются. CI обеспечивает обязательный прогон; упавший тест блокирует деплой
Главная идея
pipeline: commit → lint → unit tests → integration tests → build → deploy. Каждый этап — gate; падение останавливает pipeline
Как это выглядит на практике
- push в ветку → GitHub Actions/GitLab CI запускает pipeline.
- Этап 1: rspec --format progress (unit + integration) за 2-5 минут.
- Этап 2: сборка Docker-образа и smoke tests.
- PR не мержится пока все проверки не зелёные — branch protection rules.
- Ежедневный полный прогон включая 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 тесты чинятся немедленно, не откладываются.
Термины урока
Связь с работой 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 превращает тесты из доброй воли в инфраструктурное требование. Без автоматизации тесты деградируют; с ней — они становятся живым стандартом качества.