Параллелизация тестов позволяет значительно ускорить процесс выполнения большого набора тестов, распределяя их между несколькими потоками или машинами. В Cypress это возможно не только через официальный Dashboard, но и с помощью локальных инструментов и CI/CD систем.
Разделение тестов на блоки Cypress выполняет
тесты в рамках отдельных spec файлов. Для эффективной
параллелизации каждый spec должен быть независимым и
изолированным, чтобы результат одного файла не влиял на другой.
Использование параметра --spec При
запуске Cypress через CLI можно указывать конкретный spec
файл:
npx cypress run --spec "cypress/e2e/login.cy.js"
Это позволяет запускать несколько spec файлов
параллельно, распределяя их на разные процессы или машины.
Организация файловой структуры Рекомендуется делить тесты так, чтобы каждый файл содержал логически завершённый набор проверок. Например:
cypress/e2e/
├─ login.cy.js
├─ dashboard.cy.js
├─ settings.cy.js
└─ checkout.cy.js
Такой подход упрощает распределение нагрузки между потоками.
Можно создать несколько скриптов для параллельного запуска
spec файлов:
{
"scripts": {
"test:login": "cypress run --spec 'cypress/e2e/login.cy.js'",
"test:dashboard": "cypress run --spec 'cypress/e2e/dashboard.cy.js'",
"test:all-parallel": "npm-run-all --parallel test:*"
}
}
Здесь используется пакет npm-run-all, который позволяет
запускать несколько npm-скриптов одновременно. Каждый процесс запускает
отдельный spec, что обеспечивает параллельное
выполнение.
Для больших проектов параллелизация обычно выполняется через CI/CD. Основные подходы:
Matrix-стратегия в GitHub Actions
jobs:
cypress-tests:
runs-on: ubuntu-latest
strategy:
matrix:
spec: [login.cy.js, dashboard.cy.js, settings.cy.js]
steps:
- uses: actions/checkout@v3
- uses: cypress-io/github-action@v5
with:
spec: cypress/e2e/${{ matrix.spec }}
Каждый spec запускается в отдельном рабочем процессе,
обеспечивая реальную параллельность.
Использование Docker-контейнеров Cypress отлично
работает в Docker. Несколько контейнеров можно поднять параллельно,
каждый с собственным набором spec файлов. Это особенно
эффективно при большом числе тестов, когда один поток может занимать
несколько минут.
Пример команды:
docker run -it -v $PWD:/e2e -w /e2e cypress/included:12.14.0 npx cypress run --spec "cypress/e2e/login.cy.js"При параллельном запуске критически важно, чтобы тесты не пересекались по состоянию приложения и данным. Основные методы изоляции:
Очистка состояния между тестами Использование
beforeEach для сброса данных, очистки базы или сброса
локального хранилища.
Использование уникальных тестовых данных Генерация временных пользователей, заказов или сессий, чтобы несколько потоков не конфликтовали.
Разделение окружений Для CI-параллелизации полезно иметь несколько экземпляров базы данных или тестового окружения.
Без Dashboard контроль выполнения и сбор результатов требует ручной настройки:
Сохранение результатов в JSON или JUnit Cypress позволяет экспортировать отчёты в формате JUnit:
npx cypress run --reporter junit --reporter-options "mochaFile=results/test-[hash].xml"
После чего CI/CD собирает все отчёты в единый файл.
Скрипты агрегации результатов При большом числе параллельных потоков полезно использовать Node.js скрипты, которые объединяют JSON или XML отчёты в единый отчёт, удобный для анализа.
Параллельное выполнение тестов в Cypress без Dashboard требует тщательного планирования структуры тестов, изоляции данных и настройки процессов CI/CD, но при правильной реализации позволяет добиться высокой скорости и стабильности тестирования.