Конфигурационный файл playwright.config.js

Файл конфигурации playwright.config.js является неотъемлемой частью работы с фреймворком Playwright. Он используется для определения настроек тестового окружения, таких как параметры браузера, стратегии выполнения, пути к тестам и многое другое. Важно понимать, что грамотное использование конфигурационного файла позволяет значительно упростить управление тестами и повысить гибкость тестового процесса.

Структура и создание конфигурации

Для начала работы с Playwright, необходимо создать файл playwright.config.js в корне проекта. Этот файл должен быть JavaScript файлом, в котором экспортируются настройки, применяемые к тестам.

Пример базового конфигурационного файла:

// playwright.config.js
module.exports = {
  timeout: 30000, // общий таймаут для всех тестов
  retries: 2, // количество повторных попыток для тестов, которые не прошли
  use: {
    headless: true, // запуск браузера в фоновом режиме
    viewport: { width: 1280, height: 720 }, // размер экрана
    video: 'on-first-retry', // запись видео для первых неудачных попыток
  },
};

Конфигурация экспортируется через module.exports, что позволяет Playwright использовать её при запуске тестов. В этом примере указаны несколько общих параметров, таких как таймаут и количество повторных попыток.

Основные параметры конфигурации

1. timeout

Этот параметр задаёт максимальное время ожидания для всех операций в тестах. Если действие не завершается в указанный промежуток времени, то тест будет считаться провалившимся. Этот параметр можно переопределить на уровне конкретных тестов, если нужно задать уникальное время ожидания.

timeout: 20000, // таймаут в 20 секунд

2. retries

Количество повторных попыток для тестов, которые не прошли. Это полезно для обработки нестабильных тестов, которые могут иногда давать сбои по временным причинам, например, из-за медленного отклика сервера.

retries: 3, // три попытки для каждого теста

3. use

Объект use позволяет задать параметры по умолчанию для всех тестов. Эти параметры включают настройки для браузера, устройства, стратегии выполнения и многое другое.

use: {
  headless: false, // запуск браузера в видимом режиме
  viewport: { width: 1920, height: 1080 }, // разрешение экрана
  video: 'on', // всегда записывать видео
  actionTimeout: 10000, // таймаут для отдельных действий
  baseURL: 'https://example.com', // базовый URL для всех тестов
}

4. projects

Параметр projects позволяет создавать несколько конфигураций для разных групп тестов. Это полезно, если нужно запускать тесты для различных браузеров, операционных систем или конфигураций.

projects: [
  {
    name: 'Chrome',
    use: { browserName: 'chromium' },
  },
  {
    name: 'Firefox',
    use: { browserName: 'firefox' },
  },
],

В этом примере заданы два проекта — один для браузера Chromium, другой для Firefox. Такой подход позволяет запускать тесты для разных браузеров с одной конфигурацией.

Расширенные параметры

1. video

Параметр video управляет записью видео во время выполнения тестов. Возможные значения:

  • 'on' — всегда записывать видео для каждого теста.
  • 'on-first-retry' — записывать видео только для первых неудачных попыток.
  • 'off' — не записывать видео.
use: {
  video: 'on-first-retry',
},

2. screenshots

Параметр screenshots регулирует создание скриншотов при неудачных тестах. Возможные значения:

  • 'on' — делать скриншоты при любых сбоях.
  • 'only-on-failure' — делать скриншоты только при сбоях.
  • 'off' — не делать скриншоты.
use: {
  screenshots: 'only-on-failure',
},

3. baseURL

baseURL позволяет задать базовый URL для тестов, что упрощает написание тестов, не требующих указания полного адреса. Например, если у вас есть несколько тестов, которые обращаются к одной и той же системе, достаточно указать baseURL один раз, и тесты будут использовать его автоматически.

use: {
  baseURL: 'https://example.com',
},

Использование .env файлов для конфигурации

Для динамического изменения настроек конфигурации часто используют .env файлы, где можно хранить ключи API, URL или другие переменные окружения. Для того чтобы использовать такие файлы, необходимо установить пакет dotenv и подключить его в конфигурации.

Пример:

require('dotenv').config();

module.exports = {
  use: {
    baseURL: process.env.BASE_URL,
    video: process.env.VIDEO ? 'on' : 'off',
  },
};

В этом примере настройки baseURL и video читаются из .env файла. Это позволяет не хранить чувствительные данные в самом коде, что повышает безопасность и гибкость конфигурации.

Дополнительные функции конфигурации

1. Reporter

Playwright поддерживает различные репортеры для вывода результатов тестов. По умолчанию используется репортер dot, но можно указать другие варианты, такие как json, html, list и другие.

reporter: [
  ['dot'], // вывод в виде точек
  ['json', { outputFile: 'test-results.json' }], // вывод в формате JSON
],

2. Global setup и teardown

Playwright позволяет настроить глобальную подготовку (setup) и очистку (teardown) перед и после запуска тестов. Эти функции могут быть полезны для настройки окружения, например, для инициализации базы данных или очистки кеша.

globalSetup: require.resolve('./global-setup'),
globalTeardown: require.resolve('./global-teardown'),

Файлы global-setup.js и global-teardown.js могут содержать код для выполнения операций до и после запуска тестов.

Пример полного конфигурационного файла

require('dotenv').config();

module.exports = {
  timeout: 20000,
  retries: 2,
  use: {
    headless: true,
    viewport: { width: 1280, height: 720 },
    video: process.env.VIDEO ? 'on' : 'off',
    baseURL: process.env.BASE_URL,
    actionTimeout: 10000,
    screenshots: 'only-on-failure',
  },
  projects: [
    {
      name: 'Chrome',
      use: { browserName: 'chromium' },
    },
    {
      name: 'Firefox',
      use: { browserName: 'firefox' },
    },
  ],
  reporter: [
    ['dot'],
    ['json', { outputFile: 'test-results.json' }],
  ],
  globalSetup: require.resolve('./global-setup'),
  globalTeardown: require.resolve('./global-teardown'),
};

Этот конфигурационный файл демонстрирует использование различных настроек и интеграцию с .env файлами для повышения гибкости и безопасности.