Sauce Labs — это облачная платформа для автоматизированного тестирования, предоставляющая доступ к реальным браузерам и мобильным устройствам без необходимости их локальной настройки. WebdriverIO тесно интегрируется с 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 предоставляет доступ к эмуляторам и реальным устройствам для 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'
}
}]
Это позволяет писать кроссплатформенные тесты, не создавая локальные виртуальные устройства и не тратя ресурсы на поддержку инфраструктуры.
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.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 позволяет интегрировать результаты тестов с внутренними системами отчётности и аналитики, создавая единый процесс мониторинга качества.
В sauce:options можно передавать пользовательские
данные, теги и контекст теста:
'sauce:options': {
build: 'Custom-Data-Build',
name: 'Custom Data Test',
tags: ['regression', 'login'],
customData: {
env: 'staging',
tester: 'QA Team'
}
}
Эти данные отображаются в интерфейсе Sauce Labs и позволяют фильтровать и анализировать тесты по кастомным критериям.
Эта структура интеграции обеспечивает полный контроль над тестовой инфраструктурой, делает тесты кросс-браузерными и кроссплатформенными, позволяет вести детальный аудит и масштабировать тестирование без локальных затрат на инфраструктуру.