Многопроектная конфигурация Playwright (Projects)

В этой главе объясняется, как запускать тесты в нескольких браузерах и на устройствах с помощью конфигурации проектов, а также использование зависимостей между проектами.


Что такое проект

В Playwright проект представляет собой группутестов, которые выполняются в определённых конфигурациях браузера и устройства..

Настроив несколько проектов, можно запускать один и тот же набор тестового кода в Chromium, Firefox, WebKit и на мобильных устройствах.


Базовая конфигурация для нескольких браузеров

Пример

// Путь к файлу: playwright.config.ts
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, соотношение пикселей и т. д. реальных устройств.

Пример

import { defineConfig, devices } from '@playwright/test';

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переопределить глобальную конфигурацию:

Пример

export default defineConfig({
  использовать: {
    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 (аутентификация), а другие проекты зависят от него.

Пример

export default defineConfig({
  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

Чтобы несколько проектов могли совместно использовать конфигурацию без повторений, можно выделить базовый проект:

Пример

// Путь к файлу: playwright.config.ts
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',
      },
    },
  ],
});
Другие расширения