Переменные окружения в конфигурации

Переменные окружения в WebdriverIO используются для управления конфигурацией тестов без изменения исходного кода. Это позволяет гибко настраивать запуск тестов под разные среды: локальную разработку, staging, продакшн или CI/CD. WebdriverIO поддерживает как стандартные системные переменные окружения, так и переменные, определяемые в файле .env или через специальные плагины.


Использование process.env

Для доступа к переменным окружения в конфигурации WebdriverIO применяется объект process.env. Его можно использовать в любом месте wdio.conf.js или wdio.conf.ts.

exports.config = {
    specs: ['./test/specs/**/*.js'],
    baseUrl: process.env.BASE_URL || 'http://localhost:3000',
    capabilities: [{
        browserName: 'chrome',
        'goog:chromeOptions': {
            args: process.env.HEADLESS === 'true' ? ['--headless', '--disable-gpu'] : []
        }
    }],
};

В примере:

  • BASE_URL задаёт базовый URL для тестов, с возможностью fallback на локальный адрес.
  • HEADLESS управляет запуском браузера в безголовом режиме.

Такой подход исключает жесткое хардкодирование конфигурации в коде.


Загрузка переменных из .env

Для удобства работы с множеством переменных окружения применяется пакет dotenv. Он позволяет хранить значения в отдельном файле .env и автоматически подставлять их в process.env.

  1. Установка:
npm install dotenv --save-dev
  1. Подключение в конфигурации:
require('dotenv').config();

exports.config = {
    baseUrl: process.env.BASE_URL,
    services: ['selenium-standalone'],
    capabilities: [{
        browserName: 'firefox',
        'moz:firefoxOptions': {
            args: process.env.HEADLESS === 'true' ? ['-headless'] : []
        }
    }],
};
  1. Пример .env файла:
BASE_URL=https://staging.example.com
HEADLESS=true
API_KEY=12345abcde

Использование .env позволяет централизованно управлять настройками и безопасно хранить секретные ключи.


Передача переменных через CLI

WebdriverIO поддерживает передачу переменных напрямую через командную строку:

BASE_URL=https://prod.example.com HEADLESS=false npx wdio run wdio.conf.js

В конфигурации они будут доступны через process.env.BASE_URL и process.env.HEADLESS. Этот способ часто применяется в CI/CD, где значения переменных задаются в настройках пайплайна.


Динамическая конфигурация с использованием переменных

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

const browserName = process.env.BROWSER || 'chrome';

exports.config = {
    capabilities: [{
        browserName: browserName,
        ...(browserName === 'chrome' && { 'goog:chromeOptions': { args: ['--headless'] } }),
        ...(browserName === 'firefox' && { 'moz:firefoxOptions': { args: ['-headless'] } })
    }]
};

Такой подход облегчает поддержку одного конфигурационного файла для нескольких окружений и сокращает дублирование кода.


Использование переменных для ключей и токенов

Переменные окружения безопасно применяются для хранения чувствительных данных:

exports.config = {
    baseUrl: process.env.BASE_URL,
    before: function (capabilities, specs) {
        browser.addCommand('login', async function () {
            await browser.url('/login');
            await $('#username').setValue(process.env.USERNAME);
            await $('#password').setValue(process.env.PASSWORD);
            await $('button[type="submit"]').click();
        });
    }
};

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


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

  • Все переменные, специфичные для среды, выносить в .env или CI/CD.
  • Обязательно использовать fallback значения, чтобы конфигурация не ломалась при отсутствии переменных.
  • Для разных окружений можно создавать .env.staging, .env.prod и загружать нужный файл через dotenv.config({ path: '.env.staging' }).
  • Секреты не хранить в репозитории. Использовать безопасное хранилище переменных окружения в CI/CD.

Итоговые возможности

Переменные окружения в WebdriverIO обеспечивают:

  • Гибкость конфигурации — один файл wdio.conf.js для нескольких сред.
  • Безопасность — конфиденциальные данные не хранятся в коде.
  • Удобство CI/CD — легко менять параметры запуска без модификации файлов.
  • Масштабируемость — добавление новых сред или браузеров сводится к минимальным изменениям.

Использование process.env совместно с dotenv и CLI-переменными формирует надежную и адаптируемую систему управления конфигурацией тестов.