Что такое сервисы

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

Сервисы работают на уровне конфигурации, подключаясь через файл wdio.conf.js. Они могут выполнять следующие функции:

  • Управление браузерами и средой тестирования (например, запуск Selenium Server, Appium, или Docker-контейнеров).
  • Логирование и сбор метрик.
  • Интеграция с облачными платформами для параллельного выполнения тестов (BrowserStack, Sauce Labs).
  • Отправка отчетов о прохождении тестов в сторонние системы (Allure, ReportPortal).

Подключение сервисов

Сервис подключается через секцию services в конфигурационном файле:

exports.config = {
    runner: 'local',
    framework: 'mocha',
    services: ['selenium-standalone', 'devtools'],
    seleniumLogs: './logs',
    capabilities: [{
        maxInstances: 1,
        browserName: 'chrome'
    }]
};
  • selenium-standalone — локальный запуск Selenium Server для работы с браузерами.
  • devtools — интеграция с Chrome DevTools Protocol, которая позволяет управлять браузером без использования Selenium.

Сервисы могут быть встроенными (официальными WebdriverIO) или сторонними, устанавливаемыми через npm.


Конфигурация и параметры

Каждый сервис может принимать свои настройки, передаваемые в массиве services в виде объекта:

services: [
    ['selenium-standalone', {
        logPath: './logs',
        installArgs: {
            drivers: {
                chrome: { version: 'latest' },
                firefox: { version: 'latest' }
            }
        },
        args: {
            drivers: {
                chrome: { version: 'latest' }
            }
        }
    }]
]
  • logPath — путь для сохранения логов сервера.
  • installArgs и args — параметры установки и запуска драйверов.

Такой подход позволяет гибко настраивать среду и гарантировать, что тесты будут запускаться в предсказуемых условиях.


Основные встроенные сервисы

  1. Selenium Standalone Позволяет запускать локальный Selenium Server без необходимости устанавливать его вручную. Поддерживает Chrome, Firefox и Edge.

  2. DevTools Использует Chrome DevTools Protocol для управления браузером напрямую, обходя необходимость в WebDriver. Подходит для headless-тестирования и производительных сценариев.

  3. Appium Позволяет автоматизировать мобильные приложения (iOS, Android) через Appium Server. Настраивается аналогично Selenium, с указанием платформы и версии устройства.

  4. BrowserStack и Sauce Labs Облачные сервисы, обеспечивающие параллельное тестирование на множестве браузеров и устройств. Настраиваются с указанием логина, пароля и необходимых capabilities.


Создание собственного сервиса

WebdriverIO позволяет создавать кастомные сервисы. Основная структура включает методы, вызываемые в жизненном цикле тестирования:

  • onPrepare(config, capabilities) — выполняется перед стартом всех тестов.
  • beforeSession(config, capabilities, specs) — до инициализации сессии браузера.
  • before(caps, specs) — перед запуском тестов в конкретной сессии.
  • afterTest(test, context, { error, result, duration, passed }) — после выполнения каждого теста.
  • onComplete(exitCode, config, capabilities, results) — после завершения всех тестов.

Пример минимального кастомного сервиса:

class CustomService {
    onPrepare(config, capabilities) {
        console.log('Подготовка к тестированию');
    }

    beforeTest(test) {
        console.log(`Запуск теста: ${test.title}`);
    }

    afterTest(test, context, { passed }) {
        console.log(`Результат теста: ${passed ? 'успешно' : 'неудачно'}`);
    }
}

module.exports = CustomService;

Для подключения кастомного сервиса его достаточно указать в конфигурации:

services: [
    [CustomService, { customOption: true }]
]

Взаимодействие сервисов с lifecycle hooks

Сервисы тесно связаны с hook’ами WebdriverIO, позволяя расширять стандартные этапы тестирования. Это обеспечивает:

  • Легкое управление ресурсами (например, запуск/остановка Docker контейнеров).
  • Отправку отчетов в реальном времени.
  • Автоматическую очистку данных между тестами.

Практические рекомендации

  • Для локального тестирования лучше использовать selenium-standalone или devtools.
  • Для мобильных приложений необходим сервис Appium.
  • В CI/CD средах предпочтительно использовать облачные сервисы для параллельного запуска.
  • Кастомные сервисы удобны для интеграции с внутренними системами логирования или мониторинга.
  • Внимательно следить за версиями драйверов и браузеров, чтобы избежать несовместимости.

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