Объяснение конфигурации Playwright
В этой главе подробно описываютсяplaywright.config.tsразличные конфигурации в нём, позволяющие гибко настраивать поведение тестов в зависимости от требований проекта.
Обзор файла конфигурации
playwright.config.ts— это центральный файл конфигурации Playwright, в котором определены все параметры выполнения тестов.
Пример
// Путь к файлу: playwright.config.ts
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// ===== Базовая конфигурация =====
testDir: './tests',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
timeout: 30000,
// ===== Общая глобальная конфигурация =====
использовать: {
baseURL: 'http://localhost:3000',
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
},
// ===== Мультибраузерные проекты =====
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
],
// ===== Веб-сервер =====
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
},
});
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// ===== Базовая конфигурация =====
testDir: './tests',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
timeout: 30000,
// ===== Общая глобальная конфигурация =====
использовать: {
baseURL: 'http://localhost:3000',
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
},
// ===== Мультибраузерные проекты =====
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
],
// ===== Веб-сервер =====
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
},
});
Основные параметры конфигурации
| Элемент конфигурации | Type | Значение по умолчанию | Описание |
|---|---|---|---|
testDir | string | tests | Каталог, в котором находятся тестовые файлы |
fullyParallel | логическое значение | false | Запускать ли все тесты полностью параллельно (включая тесты внутри одного файла) |
workers | число | Ядра CPU / 2 | Количество параллельно выполняющихся воркеров |
retries | число | 0 | Количество повторных попыток для проваленных тестов |
timeout | число | 30000 | Общий тайм-аут на каждый тест (миллисекунды) |
reporter | строка/массив | list | Тип репортера тестов |
forbidOnly | логическое значение | false | Завершать с ошибкой, если в CI обнаружен test.only() |
testMatch | string/RegExp | *.spec.(ts\|js) | Шаблон сопоставления тестовых файлов |
testIgnore | string/RegExp | - | Шаблоны игнорируемых тестовых файлов |
Пример конфигурации
Пример
export default defineConfig({
// Поиск тестов в каталоге e2e
testDir: './e2e',
// Все тесты полностью параллельны
fullyParallel: true,
// Автоматически распределять количество воркеров
workers: undefined,
// Без повторных попыток при сбое (локально) / повтор 2 раза (CI)
retries: process.env.CI ? 2 : 0,
// Использовать как отчёты командной строки, так и HTML-отчёты
reporter: [
['list'],
['html', { open: 'never' }],
],
});
// Поиск тестов в каталоге e2e
testDir: './e2e',
// Все тесты полностью параллельны
fullyParallel: true,
// Автоматически распределять количество воркеров
workers: undefined,
// Без повторных попыток при сбое (локально) / повтор 2 раза (CI)
retries: process.env.CI ? 2 : 0,
// Использовать как отчёты командной строки, так и HTML-отчёты
reporter: [
['list'],
['html', { open: 'never' }],
],
});
использовать общую конфигурацию
useКонфигурация в нём применяется ко всем тестам и проектам:
| Элемент конфигурации | Type | Описание |
|---|---|---|
baseURL | string | Базовый URL, относительные пути можно использовать в тестах (например.await page.goto('/login')) |
viewport | {width, height} | Размер области просмотра браузера, по умолчанию{ width: 1280, height: 720 } |
locale | string | Язык браузера, например.'zh-CN'、'en-US' |
timezone | string | Часовой пояс, например.'Asia/Shanghai' |
colorScheme | string | Цветовая схема:'light'|'dark'|'no-preference' |
geolocation | {latitude, longitude} | Симулированная геолокация |
permissions | string[] | Предоставленные разрешения браузера (например.['geolocation']) |
userAgent | string | Пользовательская строка User-Agent |
trace | string | Стратегия сбора трассировки:'on'|'off'|'on-first-retry' |
screenshot | string | Стратегия создания скриншотов:'on'|'off'|'only-on-failure' |
video | string | Стратегия записи видео:'on'|'off'|'retain-on-failure' |
storageState | string | Путь к файлу состояния аутентификации |
testIdAttribute | string | Пользовательское имя атрибута testId, по умолчанию'data-testid' |
actionTimeout | число | Таймаут для каждой операции (click, fill) |
navigationTimeout | число | Таймаут для каждой навигации |
Конфигурация webServer
webServerКонфигурация позволяет Playwright автоматически запускать ваш сервер разработки перед запуском тестов:
Пример
export default defineConfig({
webServer: {
// Команда запуска
command: 'npm run dev',
// Подождите, пока этот URL станет доступен, прежде чем запускать тесты
url: 'http://localhost:5173',
// Длительность ожидания тайм-аута (миллисекунды)
timeout: 120000,
// Использовать ли уже запущенный сервер (можно переиспользовать локально, перезапускать в CI)
reuseExistingServer: !process.env.CI,
},
});
webServer: {
// Команда запуска
command: 'npm run dev',
// Подождите, пока этот URL станет доступен, прежде чем запускать тесты
url: 'http://localhost:5173',
// Длительность ожидания тайм-аута (миллисекунды)
timeout: 120000,
// Использовать ли уже запущенный сервер (можно переиспользовать локально, перезапускать в CI)
reuseExistingServer: !process.env.CI,
},
});
globalSetup / globalTeardown Глобальные хуки
Выполняется один раз до/после запуска всех тестов, подходит для таких операций, как инициализация базы данных.
Пример
export default defineConfig({
globalSetup: './global-setup.ts',
globalTeardown: './global-teardown.ts',
});
globalSetup: './global-setup.ts',
globalTeardown: './global-teardown.ts',
});
Пример
// Путь к файлу: global-setup.ts
import { FullConfig } from '@playwright/test';
async function globalSetup(config: FullConfig) {
// Выполняется перед запуском всех тестов
console.log('Запуск глобальной настройки...');
// Например: инициализировать тестовую базу данных, создать тестовых пользователей и т. д.
}
export default globalSetup;
import { FullConfig } from '@playwright/test';
async function globalSetup(config: FullConfig) {
// Выполняется перед запуском всех тестов
console.log('Запуск глобальной настройки...');
// Например: инициализировать тестовую базу данных, создать тестовых пользователей и т. д.
}
export default globalSetup;