Множественные конфигурации

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


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

Конфигурационный файл WebdriverIO (wdio.conf.js) содержит ключевые настройки для запуска тестов:

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

Каждая секция конфигурации может быть расширена для поддержки нескольких вариантов запуска.


Множественные браузеры через capabilities

Для одновременного тестирования на разных браузерах используется массив объектов capabilities. Каждый объект описывает отдельный браузер:

capabilities: [
    {
        browserName: 'chrome',
        maxInstances: 5,
        'goog:chromeOptions': {
            args: ['--headless', '--disable-gpu']
        }
    },
    {
        browserName: 'firefox',
        maxInstances: 3,
        'moz:firefoxOptions': {
            args: ['-headless']
        }
    }
]

Ключевые моменты:

  • maxInstances задаёт максимальное количество параллельных тестов для конкретного браузера.
  • Для каждого браузера можно задавать специфичные опции (chromeOptions, firefoxOptions и т.д.).
  • Параллельное выполнение ускоряет тестирование, особенно при большом количестве сценариев.

Использование configurations для разных сред

WebdriverIO поддерживает создание нескольких конфигураций через экспорт функции:

exports.config = () => {
    const env = process.env.TEST_ENV || 'dev';

    if (env === 'prod') {
        return {
            specs: ['./tests/prod/**/*.js'],
            capabilities: [{ browserName: 'chrome' }]
        };
    }

    return {
        specs: ['./tests/dev/**/*.js'],
        capabilities: [{ browserName: 'firefox' }]
    };
};

Особенности:

  • Переменные окружения (process.env) позволяют выбирать конфигурацию без изменения кода.
  • Разделение по средам (dev, staging, prod) обеспечивает гибкость при интеграции с CI/CD.
  • Конфигурации могут отличаться не только браузерами, но и путями к тестам, сервисами и параметрами фреймворка.

Массивы capabilities и режимы параллельного выполнения

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

  1. Параллельное выполнение на уровне экземпляров браузера — каждый объект в capabilities запускается как отдельный процесс.
  2. Параллельное выполнение на уровне тестов внутри одного экземпляра — управление через maxInstances и параметр shardTestFiles.
capabilities: [
    {
        browserName: 'chrome',
        maxInstances: 2,
        shardTestFiles: true
    }
]
  • shardTestFiles: true делит файлы тестов между экземплярами браузера.
  • Совмещение нескольких capabilities с shardTestFiles позволяет максимально ускорить прогон большого набора тестов.

Переопределение конфигураций через wdio.conf.override.js

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

const baseConfig = require('./wdio.conf.base.js');

exports.config = {
    ...baseConfig,
    specs: ['./tests/mobile/**/*.js'],
    capabilities: [
        {
            browserName: 'chrome',
            platformName: 'Android',
            deviceName: 'Pixel_6'
        }
    ]
};
  • Использование require позволяет поддерживать единый базовый конфиг.
  • Локальные файлы могут менять любые параметры, включая services, reporters и frameworkOpts.
  • Такой подход упрощает поддержку нескольких платформ (desktop, mobile) и разных сред.

Профили через CLI и npm-скрипты

Разные конфигурации можно запускать напрямую через командную строку:

npx wdio wdio.conf.js --spec ./tests/login/*.js --capabilities '{"browserName":"firefox"}'

Или создавать профили в package.json:

"scripts": {
    "test:chrome": "wdio wdio.conf.js --capabilities '{\"browserName\":\"chrome\"}'",
    "test:firefox": "wdio wdio.conf.js --capabilities '{\"browserName\":\"firefox\"}'"
}
  • CLI-параметры позволяют быстро переключаться между конфигурациями без редактирования файлов.
  • Комбинация с npm-скриптами упрощает интеграцию с CI/CD.

Применение тегов и фильтров тестов

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

specs: [
    './tests/**/*.spec.js'
],
exclude: [
    './tests/experimental/**/*.spec.js'
]
  • Использование exclude позволяет отключать тесты для определённых конфигураций.
  • В сочетании с переменными окружения можно динамически выбирать набор тестов для каждого профиля.

Рекомендации по организации конфигураций

  1. Базовый конфиг для общих настроек — общие capabilities, reporters, services.
  2. Специфичные конфиги для браузеров и сред — минимальные изменения через require и расширение объекта.
  3. Использование переменных окружения — переключение между dev/staging/prod без изменения кода.
  4. Параллельное выполнение и шардинг — максимальная эффективность при большом количестве тестов.
  5. Фильтры и теги — гибкая организация тестов для разных профилей и сред.

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