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

WebdriverIO — это мощный инструмент для автоматизации тестирования веб-приложений на JavaScript. Его гибкость обеспечивается через конфигурационный файл wdio.conf.js, где задаются все ключевые параметры работы фреймворка. Конфигурация позволяет управлять поведением тестов, интеграцией с сервисами, отчетностью и взаимодействием с браузерами.

1. Базовая структура конфигурационного файла

Файл конфигурации экспортирует объект, содержащий основные настройки:

exports.config = {
    runner: 'local',
    specs: ['./test/specs/**/*.js'],
    exclude: [],
    maxInstances: 5,
    capabilities: [],
    logLevel: 'info',
    bail: 0,
    baseUrl: 'http://localhost',
    waitforTimeout: 10000,
    connectionRetryTimeout: 120000,
    connectionRetryCount: 3,
    services: [],
    framework: 'mocha',
    reporters: ['spec']
};

Каждое свойство имеет строгое назначение и влияет на поведение WebdriverIO.


2. Runner и параллельное выполнение тестов

  • runner — определяет, где будут запускаться тесты: локально (local) или удалённо через облачные сервисы (например, browserstack или sauce).
  • maxInstances — максимальное количество параллельных экземпляров браузера. Если тестов много, увеличение этого параметра сокращает общее время прогона, но требует больше ресурсов.
  • capabilities — массив объектов, задающих параметры запуска браузеров. Пример для Chrome:
capabilities: [{
    maxInstances: 2,
    browserName: 'chrome',
    'goog:chromeOptions': {
        args: ['--headless', '--disable-gpu']
    }
}]

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

  • Каждый объект capabilities описывает один тип браузера.
  • maxInstances внутри capabilities ограничивает количество параллельных сессий конкретного браузера.

3. Настройка путей к тестам

  • specs — массив шаблонов путей к тестовым файлам.
  • exclude — исключает определённые файлы или директории из прогонов.

Пример:

specs: ['./tests/**/*.test.js'],
exclude: ['./tests/helpers/*.js']

Важно поддерживать структурированную иерархию файлов, чтобы specs легко масштабировались при росте проекта.


4. Логирование и обработка ошибок

  • logLevel — уровень логирования: trace, debug, info, warn, error, silent. Рекомендуется использовать info или debug для отладки.
  • bail — количество тестов, после которого выполнение прекращается при последовательных падениях.
  • waitforTimeout — таймаут ожидания для команд waitFor* в миллисекундах.
  • connectionRetryTimeout — время ожидания ответа от удалённого сервера.
  • connectionRetryCount — количество повторных попыток подключения.

Эти параметры критичны для стабильного выполнения тестов, особенно в CI/CD среде, где нестабильное соединение может приводить к ложным падениям.


5. Базовый URL и глобальные настройки

  • baseUrl — основной адрес приложения. Используется для сокращения ссылок в тестах:
browser.url('/login'); // откроет http://localhost/login
  • waitforTimeout и waitforInterval (если указан) позволяют глобально управлять временем ожидания элементов.

6. Фреймворк тестирования

  • framework — выбирается тестовый фреймворк: mocha, jasmine или cucumber.
  • Настройки фреймворка задаются в соответствующем объекте:
mochaOpts: {
    ui: 'bdd',
    timeout: 60000
}

Ключевое значение параметра timeout — контроль времени выполнения каждого теста, предотвращение «зависания» прогонов.


7. Сервисы и драйверы

  • services — подключаемые сервисы WebdriverIO, облегчающие интеграцию с браузерами, облачными платформами, отчетностью. Примеры:
services: ['chromedriver', 'selenium-standalone']
  • chromedriver автоматически управляет драйвером Chrome.
  • selenium-standalone позволяет запускать локальный Selenium сервер без отдельной установки.

8. Отчетность и репортеры

  • reporters — массив подключаемых репортеров: spec, allure, dot, junit.

Пример интеграции Allure:

reporters: ['spec', ['allure', { outputDir: 'allure-results' }]]

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

  • outputDir — директория для хранения результатов.
  • Репортеры позволяют визуализировать тестовые прогоны и интегрировать их с CI/CD.

9. Ключевые хуки

Конфигурация позволяет использовать хуки, которые выполняются в определённые моменты тестового цикла:

  • before — перед запуском каждого теста.
  • afterTest — после завершения теста, полезно для скриншотов при падениях.
  • onComplete — после завершения всего прогона.

Пример хука для скриншотов:

afterTest: async function(test, context, { error }) {
    if (error) {
        await browser.saveScreenshot(`./errorShots/${test.title}.png`);
    }
}

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


10. Советы по оптимизации конфигурации

  • Минимизировать дублирование параметров между capabilities и глобальными настройками.
  • Использовать переменные окружения для baseUrl, browser и timeout, чтобы конфигурация была переносимой между локальной и CI средой.
  • Аккуратно настраивать maxInstances для предотвращения перегрузки системы при параллельных прогонах.

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