Проекты
Введение
Проект — это логическая группа тестов, выполняющихся с одной и той же конфигурацией. Мы используем проекты, чтобы запускать тесты в разных браузерах и на разных устройствах. Проекты настраиваются в файле playwright.config.ts
, и после настройки вы можете запускать тесты во всех проектах или только в одном конкретном проекте. Вы также можете использовать проекты для выполнения одних и тех же тестов в разных конфигурациях. Например, вы можете запускать одни и те же тесты в состоянии входа в систему и выхода из системы.
Настроив проекты, вы также можете запускать группу тестов с разными тайм-аутами или повторными попытками, или группу тестов в разных средах, таких как staging и production, разделяя тесты по пакетам/функциональности и многое другое.
Настройка проектов для нескольких браузеров
С помощью проектов вы можете запускать тесты в нескольких браузерах, таких как chromium, webkit и firefox, а также в брендированных браузерах, таких как Google Chrome и Microsoft Edge. Playwright также может работать на эмулированных планшетах и мобильных устройствах. См. реестр параметров устройств для полного списка выбранных настольных, планшетных и мобильных устройств.
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
/* Тестирование на мобильных устройствах. */
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 5'] },
},
{
name: 'Mobile Safari',
use: { ...devices['iPhone 12'] },
},
/* Тестирование в брендированных браузерах. */
{
name: 'Microsoft Edge',
use: {
...devices['Desktop Edge'],
channel: 'msedge'
},
},
{
name: 'Google Chrome',
use: {
...devices['Desktop Chrome'],
channel: 'chrome'
},
},
],
});
Запуск проектов
По умолчанию Playwright будет запускать все проекты.
npx playwright test
Running 7 tests using 5 workers
✓ [chromium] › example.spec.ts:3:1 › basic test (2s)
✓ [firefox] › example.spec.ts:3:1 › basic test (2s)
✓ [webkit] › example.spec.ts:3:1 › basic test (2s)
✓ [Mobile Chrome] › example.spec.ts:3:1 › basic test (2s)
✓ [Mobile Safari] › example.spec.ts:3:1 › basic test (2s)
✓ [Microsoft Edge] › example.spec.ts:3:1 › basic test (2s)
✓ [Google Chrome] › example.spec.ts:3:1 › basic test (2s)
Используйте опцию командной строки --project
, чтобы запустить один проект.
npx playwright test --project=firefox
Running 1 test using 1 worker
✓ [firefox] › example.spec.ts:3:1 › basic test (2s)
Тестовый запуск в VS Code запускает ваши тесты в браузере Chrome по умолчанию. Чтобы запустить тесты в других/нескольких браузерах, нажмите на выпадающее меню кнопки воспроизведения на боковой панели тестирования и выберите другой профиль или измените профиль по умолчанию, нажав Выбрать профиль по умолчанию и выберите браузеры, в которых вы хотите запустить тесты.

Выберите конкретный профиль, различные профили или все профили для запуска тестов.

Настройка проектов для нескольких сред
Настроив проекты, мы также можем запускать группу тестов с разными тайм-аутами или повторными попытками или запускать группу тестов в разных средах. Например, мы можем запускать наши тесты в среде staging с 2 повторными попытками, а также в производственной среде с 0 повторными попытками.
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 60000, // Тайм-аут общий для всех тестов.
projects: [
{
name: 'staging',
use: {
baseURL: 'staging.example.com',
},
retries: 2,
},
{
name: 'production',
use: {
baseURL: 'production.example.com',
},
retries: 0,
},
],
});
Разделение тестов на проекты
Мы можем разделить тесты на проекты и использовать фильтры для запуска подмножества тестов. Например, мы можем создать проект, который запускает тесты, используя фильтр, соответствующий всем тестам с определенным именем файла. Затем мы можем иметь другую группу тестов, которая игнорирует определенные тестовые файлы.
Вот пример, который определяет общий тайм-аут и два проекта. Проект "Smoke" запускает небольшое подмножество тестов без повторных попыток, а проект "Default" запускает все остальные тесты с повторными попытками.
import { defineConfig } from '@playwright/test';
export default defineConfig({
timeout: 60000, // Тайм-аут общий для всех тестов.
projects: [
{
name: 'Smoke',
testMatch: /.*smoke.spec.ts/,
retries: 0,
},
{
name: 'Default',
testIgnore: /.*smoke.spec.ts/,
retries: 2,
},
],
});
Зависимости
Зависимости — это список проектов, которые должны быть выполнены до того, как начнут выполняться тесты в другом проекте. Они могут быть полезны для настройки глобальных действий, чтобы один проект зависел от их выполнения в первую очередь. При использовании зависимостей проектов, репортеры тестов будут показывать тесты настройки, а просмотрщик трасс будет записывать трассы настройки. Вы можете использовать инспектор для изучения снимка DOM трассы ваших тестов настройки, а также можете использовать fixtures внутри вашей настройки.
В этом примере проекты chromium, firefox и webkit зависят от проекта настройки.
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'setup',
testMatch: '**/*.setup.ts',
},
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
dependencies: ['setup'],
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
dependencies: ['setup'],
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
dependencies: ['setup'],
},
],
});
Последовательность выполнения
При работе с тестами, имеющими зависимость, зависимость всегда будет выполняться первой, и как только все тесты из этого проекта пройдут, другие проекты начнут выполняться параллельно.
Порядок выполнения:
-
Выполняются тесты в проекте 'setup'. Как только все тесты из этого проекта пройдут, начнут выполняться тесты из зависимых проектов.
-
Тесты в проектах 'chromium', 'webkit' и 'firefox' выполняются вместе. По умолчанию эти проекты будут выполняться параллельно, с учетом ограничения на максимальное количество рабочих процессов.

Если есть более одной зависимости, то эти зависимости проектов будут выполнены первыми и параллельно. Если тесты из зависимости не пройдут, то тесты, зависящие от этого проекта, не будут выполнены.
Порядок выполнения:
- Тесты в проектах 'Browser Login' и 'DataBase' выполняются параллельно:
- 'Browser Login' проходит
- ❌ 'DataBase' не проходит!
- Проект 'e2e tests' не выполняется!

Завершение
Вы также можете завершить настройку, добавив свойство testProject.teardown в ваш проект настройки. Завершение будет выполнено после того, как все зависимые проекты будут выполнены. См. руководство по завершению для получения дополнительной информации.
Фильтрация тестов
Если используется опция --grep/--grep-invert
или --shard
option, фильтр имени файла теста указан в командной строке или используется test.only(), это будет применяться только к тестам из самых глубоких проектов в цепочке зависимостей проекта. Другими словами, если соответствующий тест принадлежит проекту, который имеет зависимости от других проектов, Playwright выполнит все тесты из зависимых проектов, игнорируя фильтры.
Пользовательские параметры проекта
Проекты также могут использоваться для параметризации тестов с вашей пользовательской конфигурацией - ознакомьтесь с этим отдельным руководством.