Modern QA2026Продакшен-фреймворк
Join

Course13 Browser Automation with Playwright

Foundations · Chapter 13

Продакшен-фреймворк

Updated Jul 2026

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

Структура проекта в масштабе

e2e/
├── playwright.config.ts         # Основная конфигурация
├── global-setup.ts              # Разовая настройка (заполнение БД, авторизация)
├── global-teardown.ts           # Разовая очистка
├── fixtures/
│   ├── index.ts                 # Реэкспорт всех пользовательских фикстур
│   ├── auth.fixture.ts          # Фикстуры аутентификации
│   └── data.fixture.ts          # Фикстуры тестовых данных
├── pages/
│   ├── base.page.ts             # Базовый объект страницы с общими методами
│   ├── login.page.ts
│   ├── dashboard.page.ts
│   └── components/
│       ├── header.component.ts
│       └── modal.component.ts
├── tests/
│   ├── auth/
│   │   ├── login.spec.ts
│   │   └── registration.spec.ts
│   ├── checkout/
│   │   ├── cart.spec.ts
│   │   └── payment.spec.ts
│   └── admin/
│       └── user-management.spec.ts
├── test-data/
│   ├── users.json
│   └── products.json
└── utils/
    ├── api-client.ts            # API-хелпер для настройки/очистки
    └── test-helpers.ts          # Общие утилитарные функции

Ключевые соглашения

  • Один spec-файл на функциональную область, не на страницу — тесты организованы по тому, что они проверяют
  • Объекты страниц в pages/, фикстуры в fixtures/ — чёткое разделение
  • Общие тестовые данные в test-data/ — не захардкожены в тестах
  • Утилиты в utils/ — API-клиенты, хелперы дат, генераторы

Управление конфигурацией

Настройка для нескольких окружений

// playwright.config.ts
import { defineConfig } from '@playwright/test';

const env = process.env.TEST_ENV || 'staging';

const envConfig = {
  local: { baseURL: 'http://localhost:3000' },
  staging: { baseURL: 'https://staging.example.com' },
  production: { baseURL: 'https://example.com' },
};

export default defineConfig({
  testDir: './tests',
  timeout: 60_000,
  retries: env === 'production' ? 0 : 2,
  workers: env === 'local' ? undefined : 4,
  use: {
    baseURL: envConfig[env].baseURL,
    screenshot: 'only-on-failure',
    trace: 'on-first-retry',
    video: 'on-first-retry',
  },
  projects: [
    { name: 'setup', testMatch: /.*\.setup\.ts/ },
    {
      name: 'chromium',
      dependencies: ['setup'],
      use: { browserName: 'chromium', storageState: '.auth/user.json' },
    },
    {
      name: 'firefox',
      dependencies: ['setup'],
      use: { browserName: 'firefox', storageState: '.auth/user.json' },
    },
  ],
});

Запуск для разных окружений

# По умолчанию (staging)
npx playwright test

# Локальная разработка
TEST_ENV=local npx playwright test

# Smoke-тесты на продакшене
TEST_ENV=production npx playwright test --grep @smoke

Тегирование тестов

Используйте теги для категоризации тестов и выборочного запуска:

test('@smoke вход с валидными учётными данными', async ({ page }) => {
  // Критический путь — запускается при каждом деплое
});

test('@regression корзина обрабатывает 100 товаров', async ({ page }) => {
  // Полная проверка — запускается ночью
});

test('@slow генерация отчёта с большим набором данных', async ({ page }) => {
  // Ресурсоёмкий — запускается по запросу
});
npx playwright test --grep @smoke        # Только smoke-тесты
npx playwright test --grep-invert @slow  # Всё кроме медленных тестов

Пользовательские репортеры

Playwright поддерживает несколько репортеров одновременно:

// playwright.config.ts
export default defineConfig({
  reporter: [
    ['list'],                           // Вывод в консоль
    ['html', { open: 'never' }],        // HTML-отчёт
    ['json', { outputFile: 'results.json' }],  // Машиночитаемый
    ['junit', { outputFile: 'results.xml' }],  // Интеграция с CI
  ],
});

Глобальная настройка и очистка

// global-setup.ts
import { chromium, FullConfig } from '@playwright/test';

async function globalSetup(config: FullConfig) {
  // Заполнение базы данных
  // Создание тестовых пользователей через API
  // Прогрев приложения
}

export default globalSetup;
// playwright.config.ts
export default defineConfig({
  globalSetup: require.resolve('./global-setup'),
  globalTeardown: require.resolve('./global-teardown'),
});

Ключевые выводы

  • Организуйте по функциональности (не по страницам) — тесты, объекты страниц и фикстуры в отдельных директориях
  • Используйте переменные окружения для мультисредовой конфигурации — один файл конфигурации, несколько целей
  • Тегируйте тесты (@smoke, @regression, @slow) для выборочного запуска
  • Комбинируйте репортеры (HTML + JSON + JUnit) для разных аудиторий
  • Глобальная настройка обрабатывает разовые задачи: заполнение базы данных и аутентификацию