Параллелизация с Dashboard

Параллелизация тестов — один из ключевых инструментов для ускорения выполнения больших тестовых наборов. В Cypress она тесно интегрирована с Dashboard Service, который позволяет распределять тесты между несколькими CI-агентами, контролировать статус выполнения и собирать подробные отчёты.

Основы параллельного выполнения

Cypress Dashboard использует механизм разделения тестов на группы, называемые shards. Каждый shard запускается на отдельном агенте CI, что обеспечивает одновременное выполнение нескольких частей тестового набора. Это позволяет значительно сократить общее время прогонки, особенно при сотнях и тысячах тестов.

Ключевые моменты:

  • Процесс shard-ирования зависит от количества файлов с тестами. Cypress автоматически определяет, какие файлы можно запускать параллельно.
  • Dashboard Service отслеживает прогресс каждого shard, собирает логи и скриншоты, а также предоставляет агрегированную статистику.
  • Параллелизация не требует изменения тестов: достаточно правильно настроить CI и интеграцию с Dashboard.

Настройка параллельного запуска

Для использования параллелизации необходимо:

  1. Включить проект на Dashboard через команду:

    npx cypress open

    и зарегистрировать проект с уникальным ключом recordKey.

  2. Запуск с параметром --record и --parallel:

    npx cypress run --record --key <recordKey> --parallel

    Этот запуск отправляет информацию о тестах на Dashboard, где она распределяется между доступными агентами.

  3. Настройка CI/CD: большинство популярных систем (GitHub Actions, GitLab CI, Jenkins) позволяют указать несколько параллельных job-агентов. Cypress автоматически определяет, какие тесты должны выполняться на каждом агенте.

Разделение тестов (Sharding)

Cypress поддерживает два способа шардирования:

  • Автоматическое распределение файлов тестов: каждый агент получает набор файлов, который минимизирует время выполнения.

  • Ручное определение групп через group в конфигурации CI:

    npx cypress run --record --group "smoke-tests" --parallel

    Это позволяет логически разделять тесты (например, smoke, regression, integration) и контролировать скорость выполнения и приоритет.

Интеграция с Dashboard

Dashboard Service выполняет несколько функций при параллельном запуске:

  • Агрегация результатов: показывает общее время выполнения всех shards и процент прохождения.
  • Просмотр видео и скриншотов: каждая ошибка сохраняется с видеозаписью и скриншотом, что облегчает диагностику.
  • Оптимизация времени: Dashboard использует историю предыдущих прогонов, чтобы распределять тесты равномерно и избегать перегрузки одного агента.

Важные настройки для эффективной параллелизации

  • --ci-build-id: задаёт уникальный идентификатор сборки CI, чтобы Cypress Dashboard мог сопоставлять все shards с конкретным прогоном.
  • --group: задаёт логическое имя группы тестов, которое отображается в Dashboard.
  • --tag: позволяет добавлять метки для фильтрации прогонов.
  • numTestsKeptInMemory: уменьшение этого параметра может ускорить выполнение параллельных тестов, особенно при большом количестве файлов.

Практические рекомендации

  • Минимизировать зависимости между тестами: каждый shard выполняется изолированно, поэтому глобальные состояния или данные между тестами могут вызвать нестабильность.
  • Оптимизировать структуру файлов тестов: равномерное распределение больших и маленьких файлов позволяет Dashboard точнее делить нагрузку.
  • Использовать отдельные окружения для параллельных прогонов: это предотвращает конфликты данных и снижает вероятность падений.
  • Следить за лимитами Dashboard: бесплатный план имеет ограничения на количество параллельных агентов и хранение видео/скриншотов.

Примеры использования в CI

Пример конфигурации для GitHub Actions с параллельным запуском:

jobs:
  cypress-tests:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        shard: [1, 2, 3, 4]
    steps:
      - uses: actions/checkout@v3
      - name: Install dependencies
        run: npm ci
      - name: Run Cypress tests
        run: npx cypress run --record --key ${{ secrets.CYPRESS_RECORD_KEY }} --parallel --ci-build-id ${{ github.run_id }}

В этом примере четыре агента одновременно выполняют тесты, каждый получает свою часть тестового набора, а Dashboard собирает результаты в единую панель.

Метрики и анализ производительности

Dashboard предоставляет:

  • Time per test: позволяет выявить самые медленные тесты.
  • Flaky test detection: отмечает тесты, которые падают нестабильно, что особенно важно при параллельном запуске.
  • Trend analysis: показывает динамику прогонов по времени и позволяет оптимизировать разделение тестов.

Параллелизация через Cypress Dashboard позволяет эффективно масштабировать тестирование, сокращать время выполнения и повышать стабильность сборок. Правильная настройка CI, использование групп, уникальных build ID и управление шардированием создают основу для оптимального распределения тестов на нескольких агентах.