Какие есть виды тестирования в контексте CI/CD?

«Какие есть виды тестирования в контексте CI/CD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-практике CI/CD пайплайн строится как цепочка различных видов тестирования, каждый из которых решает свою задачу и запускается на соответствующем этапе.

  1. Модульное тестирование (Unit Testing): Проверяет отдельные функции или методы в изоляции. Это самый быстрый и базовый уровень. В моих пайплайнах unit-тесты запускаются первыми при каждом коммите.

    # Пример шага в GitLab CI для Go-приложения
    unit-test:
      stage: test
      script:
        - go test ./... -v -short
  2. Интеграционное тестирование (Integration Testing): Проверяет взаимодействие между модулями, сервисами или с внешними зависимостями (БД, кэш, API). Для этого я часто использую Docker Compose или тестовые стенды в пайплайне.

  3. End-to-End (E2E) тестирование: Имитирует действия реального пользователя в полном, приближенном к продакшену окружении. Мы запускаем E2E-сюиты на staging-среде после успешного деплоя.

  4. Тестирование производительности и нагрузочное тестирование (Performance/Load Testing): Оценивает поведение системы под нагрузкой. Я интегрировал инструменты вроде k6 или JMeter в пайплайн для запуска сценариев на staging.

    // Пример скрипта k6 для пайплайна
    import http from 'k6/http';
    export default function() {
      http.get('https://staging-api.example.com/health');
    }
  5. Тестирование безопасности (Security Testing): Статический анализ кода (SAST) на уязвимости и анализ зависимостей (SCA) с помощью таких инструментов, как Trivy, Snyk или GitLab SAST. Этот этап обязателен в нашем пайплайне.

  6. Регрессионное тестирование (Regression Testing): Обеспечивает, что новые изменения не сломали существующий функционал. В CI/CD это достигается за счет полного прогона автоматизированных тестовых сюит.

  7. Дымовое тестирование (Smoke Testing): Быстрая проверка базовой работоспособности сборки сразу после деплоя. Например, проверка, что главная страница приложения загружается и ключевые эндпоинты API отвечают.

Ключевой принцип, который я применяю — размещение самых быстрых и дешёвых тестов (unit, linting) в начале пайплайна, а долгих и ресурсоёмких (E2E, нагрузка) — ближе к концу, чтобы не блокировать разработку.

Видео-ответы