Sauce Labs сервис

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


Настройка проекта для работы с Sauce Labs

Для начала необходимо установить WebdriverIO и зависимости для работы с удалёнными сессиями:

npm install @wdio/cli @wdio/local-runner @wdio/mocha-framework @wdio/sauce-service

Ключевой компонент здесь — сервис @wdio/sauce-service, который обеспечивает соединение с облаком Sauce Labs и управление сессиями.

В файле конфигурации WebdriverIO (wdio.conf.js) подключение к Sauce Labs осуществляется через раздел services и объект user и key для аутентификации:

exports.config = {
    user: process.env.SAUCE_USERNAME,
    key: process.env.SAUCE_ACCESS_KEY,

    services: ['sauce'],

    capabilities: [{
        browserName: 'chrome',
        platformName: 'Windows 11',
        browserVersion: 'latest',
        'sauce:options': {
            build: 'WebdriverIO-Sauce-Example',
            name: 'My First Test'
        }
    }],

    framework: 'mocha',
    reporters: ['spec'],
};

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

  • user и key должны храниться в переменных окружения для безопасности.
  • sauce:options позволяет задавать метаданные тестов, такие как имя, билд или теги.
  • capabilities поддерживает несколько браузеров и платформ, что обеспечивает параллельное тестирование.

Параллельный запуск тестов

Sauce Labs позволяет запускать тесты на нескольких браузерах и устройствах одновременно. Для этого достаточно добавить в конфигурацию массив capabilities:

capabilities: [
    {
        browserName: 'chrome',
        platformName: 'Windows 11',
        browserVersion: 'latest',
        'sauce:options': { build: 'Parallel-Example', name: 'Chrome Test' }
    },
    {
        browserName: 'firefox',
        platformName: 'macOS 13',
        browserVersion: 'latest',
        'sauce:options': { build: 'Parallel-Example', name: 'Firefox Test' }
    }
],
maxInstances: 5

maxInstances ограничивает количество одновременных сессий, что важно для управления ресурсами Sauce Labs и оптимизации стоимости.


Отслеживание и логирование тестов

Sauce Labs предоставляет детальную информацию о каждом тесте: скриншоты, видео, логи консоли и сетевых запросов. В WebdriverIO включение этих возможностей осуществляется через sauce:options:

'sauce:options': {
    capturePerformance: true,
    screenResolution: '1920x1080',
    seleniumVersion: '4.10.0',
    build: 'Detailed-Logging',
    name: 'Test with Video',
    recordScreenshots: true,
    recordVideo: true
}

Преимущества использования этих опций:

  • Возможность пересмотра тестовых сессий в интерфейсе Sauce Labs.
  • Диагностика ошибок по скриншотам и видео.
  • Сбор метрик производительности браузера.

Использование Mobile Emulators и Real Devices

Sauce Labs предоставляет доступ к эмуляторам и реальным устройствам для iOS и Android. Конфигурация мобильного теста в WebdriverIO:

capabilities: [{
    platformName: 'iOS',
    deviceName: 'iPhone 14 Simulator',
    platformVersion: '16.4',
    browserName: 'Safari',
    'sauce:options': {
        build: 'Mobile-Example',
        name: 'iOS Safari Test'
    }
}]

Для Android:

capabilities: [{
    platformName: 'Android',
    deviceName: 'Google Pixel 7 GoogleAPI Emulator',
    platformVersion: '13.0',
    browserName: 'Chrome',
    'sauce:options': {
        build: 'Mobile-Example',
        name: 'Android Chrome Test'
    }
}]

Это позволяет писать кроссплатформенные тесты, не создавая локальные виртуальные устройства и не тратя ресурсы на поддержку инфраструктуры.


Интеграция с CI/CD

WebdriverIO совместим с любыми CI/CD системами (Jenkins, GitHub Actions, GitLab CI). Для интеграции с Sauce Labs достаточно установить переменные окружения SAUCE_USERNAME и SAUCE_ACCESS_KEY в пайплайне, а запуск тестов происходит стандартной командой:

npx wdio run wdio.conf.js

Оптимальные практики:

  • Использовать разные build для каждого запуска в CI, чтобы различать сессии.
  • Включать отчёты (reporters) для анализа тестов в автоматическом режиме.
  • Ограничивать maxInstances в зависимости от тарифного плана Sauce Labs.

Использование REST API Sauce Labs для управления сессиями

Sauce Labs предоставляет REST API для получения статуса сессий, артефактов и аналитики. Это полезно для автоматизированного обновления отчётов:

const fetch = require('node-fetch');

async function getSessionInfo(sessionId) {
    const response = await fetch(`https://api.us-west-1.saucelabs.com/v1/tests/${sessionId}`, {
        headers: {
            'Authorization': `Basic ${Buffer.from(`${process.env.SAUCE_USERNAME}:${process.env.SAUCE_ACCESS_KEY}`).toString('base64')}`
        }
    });
    const data = await response.json();
    console.log(data);
}

REST API позволяет интегрировать результаты тестов с внутренними системами отчётности и аналитики, создавая единый процесс мониторинга качества.


Передача данных между WebdriverIO и Sauce Labs

В sauce:options можно передавать пользовательские данные, теги и контекст теста:

'sauce:options': {
    build: 'Custom-Data-Build',
    name: 'Custom Data Test',
    tags: ['regression', 'login'],
    customData: {
        env: 'staging',
        tester: 'QA Team'
    }
}

Эти данные отображаются в интерфейсе Sauce Labs и позволяют фильтровать и анализировать тесты по кастомным критериям.


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