Профили конфигурации

WebdriverIO предоставляет гибкую систему конфигураций, позволяющую адаптировать тестовую среду под разные задачи и окружения. Профили конфигурации упрощают управление настройками для локальной разработки, CI/CD, различных браузеров и мобильных платформ.

Основы конфигурации

Файл конфигурации WebdriverIO (wdio.conf.js или .ts) является центральным элементом настройки тестовой среды. Он включает параметры:

  • runner — определяет среду запуска (например, локально или в облаке).
  • specs — массив путей к тестовым файлам.
  • capabilities — объекты с настройками для браузеров или устройств.
  • services — подключаемые сервисы для расширенной функциональности (например, Selenium Standalone, Appium, Allure).
  • framework — тестовый фреймворк (Mocha, Jasmine, Cucumber).
  • reporters — средства отчетности.

Конфигурация позволяет задавать глобальные переменные, тайм-ауты, hooks для выполнения действий до и после тестов.

Профили для разных окружений

Разделение конфигураций на профили позволяет иметь несколько вариантов настроек в рамках одного проекта. Основные сценарии использования профилей:

  1. Локальная разработка Настройки ориентированы на скорость и удобство отладки:

    • Быстрые браузеры (например, Chrome или Firefox без headless).
    • Минимальное количество репортеров.
    • Локальные сервисы, такие как Selenium Standalone.
  2. CI/CD Профили для интеграции с системами автоматической сборки:

    • Headless режим браузеров для ускорения выполнения.
    • Полные репортеры и сохранение артефактов (скриншоты, видео).
    • Увеличенные тайм-ауты для сетевых задержек.
  3. Кросс-браузерное тестирование Позволяет запускать один и тот же набор тестов на разных браузерах или устройствах:

    • Разделение capabilities по браузерам.
    • Использование сервисов, таких как Sauce Labs или BrowserStack.
    • Настройка параллельного запуска с оптимизацией ресурсов.
  4. Мобильное тестирование Профили для Appium и эмуляторов:

    • capabilities включают платформу (iOS, Android), версию OS и устройство.
    • Возможность переключения между реальными устройствами и эмуляторами.

Механизм переключения профилей

WebdriverIO поддерживает передачу параметров при запуске через CLI:

npx wdio run wdio.conf.js --profile ci

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

exports.config = {
    runner: 'local',
    specs: ['./tests/**/*.js'],
    capabilities: [],
    services: ['selenium-standalone'],
    framework: 'mocha',
    reporters: ['spec'],

    profiles: {
        ci: {
            capabilities: [
                { browserName: 'chrome', 'goog:chromeOptions': { args: ['--headless'] } }
            ],
            reporters: ['spec', ['allure', { outputDir: 'allure-results' }]]
        },
        mobile: {
            services: ['appium'],
            capabilities: [
                { platformName: 'iOS', deviceName: 'iPhone 14', platformVersion: '16.0' },
                { platformName: 'Android', deviceName: 'Pixel 7', platformVersion: '13' }
            ]
        }
    }
};

При использовании профилей можно переопределять любые параметры, включая specs, capabilities, services, timeouts и hooks.

Динамическая конфигурация

Для сложных сценариев возможно создание динамической конфигурации с использованием функций и переменных окружения:

const environment = process.env.TEST_ENV || 'local';

exports.config = {
    runner: 'local',
    specs: ['./tests/**/*.js'],
    capabilities: [],
    services: ['selenium-standalone'],
    framework: 'mocha',
    reporters: ['spec'],
    ...require(`./wdio.profiles.${environment}.js`)
};

Такой подход позволяет хранить отдельные файлы для каждого профиля (wdio.profiles.ci.js, wdio.profiles.local.js) и автоматически подключать нужный.

Hooks и профили

Hooks (before, after, beforeSuite, afterSuite) также можно адаптировать под профиль. Например, для CI можно добавлять дополнительные логирования или отчеты:

before: function (capabilities, specs) {
    if (process.env.TEST_ENV === 'ci') {
        console.log('Запуск тестов в CI среде');
    }
}

Лучшие практики использования профилей

  • Наследование конфигураций: общий базовый конфиг и частные профили для конкретных задач.
  • Избегать дублирования: использовать spread-операторы или Object.assign для объединения настроек.
  • Версионирование профилей: хранить файлы с конфигурациями в системе контроля версий, чтобы избежать рассинхронизации.
  • Тестирование профилей локально: перед запуском в CI убедиться, что профиль корректно работает в локальной среде.

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