Продакшен-фреймворк
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) для разных аудиторий
- Глобальная настройка обрабатывает разовые задачи: заполнение базы данных и аутентификацию