Многопроектная конфигурация Playwright (Projects)
В этой главе объясняется, как запускать тесты в нескольких браузерах и на устройствах с помощью конфигурации проектов, а также использование зависимостей между проектами.
Что такое проект
В Playwright проект представляет собой группутестов, которые выполняются в определённых конфигурациях браузера и устройства..
Настроив несколько проектов, можно запускать один и тот же набор тестового кода в Chromium, Firefox, WebKit и на мобильных устройствах.
Базовая конфигурация для нескольких браузеров
Пример
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'] },
},
],
});
Запуск тестов для конкретного браузера:
# 仅在 Chromium 上运行 npx playwright test --project=chromium # 在 Chromium 和 Firefox 上运行 npx playwright test --project=chromium --project=firefox
devices: предустановки устройств
Playwright включает большое количество встроенных предустановок устройств (из@playwright/testизdevices), которые имитируют область просмотра, User-Agent, соотношение пикселей и т. д. реальных устройств.
Пример
export default defineConfig({
projects: [
// Десктоп
{
name: 'desktop-chrome',
use: { ...devices['Desktop Chrome'] },
},
// Мобильный
{
name: 'mobile-iphone',
use: { ...devices['iPhone 15'] },
},
{
name: 'mobile-pixel',
use: { ...devices['Pixel 7'] },
},
// Планшет
{
name: 'tablet-ipad',
use: { ...devices['iPad Pro'] },
},
],
});
Часто используемые предустановки устройств:
| Название предустановки | Тип устройства | Размер области просмотра |
|---|---|---|
Desktop Chrome | Компьютер | 1280×720 |
Desktop Firefox | Компьютер | 1280×720 |
Desktop Safari | Компьютер | 1280×720 |
iPhone 15 | Мобильные | 393×852 |
Pixel 7 | Мобильные | 412×915 |
iPad Pro | Планшет | 1024×1366 |
Пользовательская конфигурация проекта
Вы можете в проектеuseпереопределить глобальную конфигурацию:
Пример
использовать: {
baseURL: 'http://localhost:3000',
locale: 'zh-CN',
timezone: 'Asia/Shanghai',
},
projects: [
{
name: 'chromium-desktop',
использовать: {
...devices['Desktop Chrome'],
// Наследовать глобальные locale и timezone
},
},
{
name: 'chromium-mobile',
использовать: {
...devices['Pixel 7'],
// Переопределить на английское окружение
locale: 'en-US',
timezone: 'America/New_York',
},
},
Проверка тёмного режима
{
name: 'chromium-dark',
использовать: {
...devices['Desktop Chrome'],
colorScheme: 'dark',
},
},
// Проверить светлый режим
{
name: 'chromium-light',
использовать: {
...devices['Desktop Chrome'],
colorScheme: 'light',
},
},
],
});
Зависимости проектов
Проект может зависеть от другого проекта, что гарантирует, что проект, от которого он зависит, запускается первым.
Наиболее распространённый вариант использования — сначала запускается проект Setup (аутентификация), а другие проекты зависят от него.
Пример
projects: [
// Проект Setup — сгенерировать состояние аутентификации
{
name: 'setup',
testMatch: /auth\.setup\.ts/,
},
// Тестовый проект зависит от setup, что гарантирует, что состояние аутентификации будет сгенерировано первым
{
name: 'chromium',
использовать: {
...devices['Desktop Chrome'],
storageState: 'playwright/.auth/user.json',
},
dependencies: ['setup'],
},
{
name: 'firefox',
использовать: {
...devices['Desktop Firefox'],
storageState: 'playwright/.auth/user.json',
},
dependencies: ['setup'],
},
],
});
setupПроект запускается только один раз, и все проекты, которые от него зависят, будут ждать его завершения перед запуском.
Совместное использование конфигурации через testProject
Чтобы несколько проектов могли совместно использовать конфигурацию без повторений, можно выделить базовый проект:
Пример
import { defineConfig, devices } from '@playwright/test';
const desktopProject = {
использовать: {
...devices['Desktop Chrome'],
viewport: { width: 1920, height: 1080 },
locale: 'zh-CN',
},
} as const;
export default defineConfig({
projects: [
{
name: 'chromium',
...desktopProject, // Унаследовать конфигурацию desktopProject
использовать: {
...desktopProject.use, // Сначала унаследовать
browserName: 'chromium', // Затем переопределить
},
},
{
name: 'firefox',
использовать: {
...devices['Desktop Firefox'],
// Переопределить viewport и locale
viewport: { width: 1920, height: 1080 },
locale: 'zh-CN',
},
},
],
});