Playwright предоставляет мощные возможности для автоматизации браузерных тестов. Однако, разработчики часто задаются вопросом — как правильно структурировать Playwright проект, особенно если тесты затрагивают изменение окружения, создание ресурсов или работу с базой данных. В этой статье мы рассмотрим стратегии запуска тестов в Playwright — параллельно, последовательно или в смешанном режиме — с упором на повышение эффективности и надёжности тестового процесса.
Содержание:
- Понимание типов тестов: stateful vs stateless
- Выполнение тестов по умолчанию
- Последовательное выполнение тестов
- Параллельное выполнение тестов
- Различные режимы выполнения тестов
- Гибкость Playwright как преимущество
- Заключение
🔥 Важное для QA-специалистов! 🔥
В QaRocks ты найдешь туториалы, задачи и полезные книги, которых нет в открытом доступе. Уже более 15.000 подписчиков – будь среди нас! Заходи к нам в телеграм канал QaRocks
Типы тестов: stateful и stateless
Тесты разделяются на 2 основных типа: stateless и stateful. Рассмотрим каждый из них подробнее.
- Stateless тесты не зависят от состояния окружения и не изменяют глобальные настройки. Они изолированы, не влияют друг на друга, и потому безопасно и эффективно запускаются параллельно. Они отлично подходят для параллельного запуска, быстрые и устойчивые, не оставляют следов в системе.
- Stateful тесты изменяют окружение: создают или удаляют ресурсы, меняют глобальные конфигурации. Если такие тесты запускать параллельно, они могут мешать друг другу — действия одного теста могут модифицировать окружение так, что второй тест из-за этого упадет.
Антипаттерном считается, когда тесты зависят от состояния, созданного предыдущими тестам.
Каждый тест должен сам создавать и очищать данные после выполнения — это позволяет избежать захламления тестового окружения и обеспечить возможность распараллеливания.
Выполнение тестов по умолчанию
Playwright прекрасно справляется с параллельным выполнением, значительно сокращая время выполнения всего сьюта. Это полезно в случае stateful-тестов. По умолчанию Playwright пытается выполнять тесты параллельно, используя несколько worker-процессов, все тесты внутри одного файла выполняются последовательно и обрабатываются одним и тем же worker’ом.

Это поведение позволяет эффективно использовать ресурсы, не нарушая изоляцию между тестами в разных файлах.
Если вы хотите расширить параллелизацию или у вас есть особые требования к запуску, модель выполнения можно настроить несколькими способами:
- Установить
fullyParallel: trueвplaywright.config, чтобы разрешить параллельное выполнение тестов даже внутри одного файла. - Изменить модель выполнения для конкретного файла с помощью
test.describe.configure. - Ограничить количество worker’ов в
playwright.configили через командную строку при запуске.
Далее рассмотрим распространённые сценарии выполнения тестов и соответствующую им конфигурацию.
Последовательное выполнение тестов
Хотя параллельное выполнение тестов обычно эффективно, бывают ситуации, когда тесты необходимо запускать последовательно. Это особенно важно для разрушающих и stateful-тестов, где критично сохранить предсказуемое и неизмененное состояние окружения — иначе результат теста может быть недостоверным.
Если нужно запустить все тесты проекта последовательно, можно полностью отключить параллельное выполнение в Playwright.
Для этого нужно выставить количество worker-процессов = 1, и все тесты из всех файлов будут выполняться последовательно, один за другим.
Но помните, что по возможности имеет смысл распараллеливать как можно больше тестов, чтобы сократить общее время выполнения.
Вы можете ограничить количество worker-ов с помощью командной строки:
npx playwright test --workers=1
Или установите свойство workers на 1 в файле playwright.config.
export default defineConfig({
workers: 1,
});
Есть несколько вариантов запуска определенных тестов последовательно в одном worker-е.
# Последовательный запуск всех тестов в файле `./tests/sequential` npx playwright test --workers=1 ./tests/sequential # Последовательный запуск всех тестов с тегом `@sequential` npx playwright test --workers=1 --grep @sequential # Последовательный запуск всех тестов проекта `sequential` npx playwright test --workers=1 --project=sequential
Вы можете запускать отдельные тестовые файлы, использовать фильтрацию по тегам (через grep) или создать отдельный проект в конфигурации, в котором тесты будут выполняться последовательно. Ни один из этих подходов не является лучшим — все зависит от особенностей вашего проекта.
Параллельное выполнение тестов
Благодаря автоматической инкапсуляции (изоляции окружения) и удобной функциональности worker-ов, Playwright может запускать тесты параллельно, а это значительно сокращает время прогона выбранных тестов.
По умолчанию запуск нескольких worker-ов ограничивается на уровне тестовых файлов. Однако, можно вручную настроить параллельное выполнение stateless-тестов, которые будут работать в изолированных друг от друга окружениях.
Чтобы явно настроить параллельное выполнение всех ваших тестов, используйте опцию fullyParallel в конфигурационном файле Playwright или в настройках проекта. Эта опция указывает Playwright на максимальный параллелизм путем запуска отдельных worker-ов для каждого тестового файла. Теперь Playwright будет пытаться запустить как можно больше тестов параллельно, независимо от того, в каких файлах они определены.
export default defineConfig({
fullyParallel: true,
});
Существует большое разнообразие настроек системы, позволяющих гибко управлять порядком выполнения тестов — как внутри отдельных файлов, так и в группах тестов. Это даёт возможность тонко настраивать Playwright под конкретные сценарии и требования проекта.
Различные режимы выполнения тестов
Помимо управления порядком выполнения тестов и параллелизмом с помощью параметров workers и опции fullyParallel, Playwright также позволяет настраивать режим выполнения для каждого файла или группы тестов с помощью специальных опций.
Последовательное выполнение связанных тестов
Если вы хотите запустить все тесты вашего проекта с помощью fullyParallel, но при этом есть необходимость последовательного запуска тестов в одном отдельно взятом файле, используйте serial режим.
import { test, type Page } from '@playwright/test';
/**
* Последовательный запуск тестов в файле и остановка после падения.
*
* -> Если `One` упадет, то `Two` выполняться не будет.
*/
test.describe.configure({ mode: 'serial' });
test('One', async () => { /* ... */ });
test('Two', async () => { /* ... */ });
Обратите внимание, что при использовании данного режима падение одного теста влечет за собой остановку прогона, то есть все последующие тесты в группе выполняться не будут.
Последовательное выполнение несвязанных тестов (default)
Если вы запускаете все тесты проекта с включённым fullyParallel, но хотите, чтобы тесты в одном файле выполнялись последовательно, без остановки при падении отдельных тестов, используйте режим по умолчанию.
import { test, type Page } from '@playwright/test';
/**
* Последовательный запуск тестов внутри файла независимо от наличия падений.
*
* -> Если `One` упадет, то `Two` все равно запустится.
*/
test.describe.configure({ mode: 'default' });
test('One', async () => { /* ... */ });
test('Two', async () => { /* ... */ });
В default режиме будут выполняться все указанные тесты, а упавшие тесты будут игнорироваться.
Параллельный режим
Если вы не хотите распараллеливать все тесты с помощью fullyParallel, но при этом у вас есть один файл с stateless тестами, который должен выполняться параллельно, используйте parallel режим.
import { test, type Page } from '@playwright/test';
/**
* Параллельный прогон тестов внутри файла.
*/
test.describe.configure({ mode: 'parallel' });
test('One', async () => { /* ... */ });
test('Two', async () => { /* ... */ });
Гибкость Playwright как преимущество
Архитектура Playwright поддерживает различные стратегии тестирования, позволяя разработчикам адаптировать выполнение тестов под нужды проекта. Независимо от того, запускаете ли вы тесты параллельно для экономии времени или последовательно для обеспечения стабильности окружения, Playwright предоставляет инструменты, которые необходимы для настройки подходящего тестового окружения.
Советы по организации тестов
- Используйте каталоги, теги и проекты, чтобы разделять stateful и stateless тесты и применять к ним соответствующий режим выполнения — параллельный или последовательный.
- Продумывайте наименование файлов с тестами, если для выполнения используется алфавитный порядок.
- Рассмотрите возможность использования разбиения тестов (sharding) и аннотаций Playwright для более гибкой организации сложных тестовых наборов.
Заключение
Выбор между параллельным и последовательным запуском тестов в Playwright зависит от характера самих тестов и их воздействия на окружение приложения. Разделяя тесты на stateful и stateless, разработчики могут применять соответствующую стратегию выполнения, обеспечивая эффективность и надёжность процесса сквозного (end-to-end) тестирования.
Перевод статьи «How to run Playwright tests in parallel».

Пингбэк: Оптимизация BeforeAll Playwright с помощью Global Cache - QaRocks