Работа с переменными окружения

Переменные окружения играют ключевую роль при автоматизации тестирования в Playwright. Они позволяют хранить конфиденциальные данные, такие как токены авторизации, URL-адреса, параметры конфигурации и другие переменные, которые могут отличаться в зависимости от среды (например, локальная разработка, тестирование, продакшн). Использование переменных окружения помогает централизовать конфигурацию и сделать тесты более гибкими.

Важность использования переменных окружения

Переменные окружения позволяют избежать жесткой привязки к конкретным значениям в коде. Вместо того чтобы хардкодить данные, такие как URL-адреса API или логины, можно хранить их в переменных окружения. Это повышает безопасность, улучшает переносимость тестов и облегчает их поддержку.

Пример:

const baseUrl = process.env.BASE_URL;

В этом примере BASE_URL — это переменная окружения, значение которой будет подставлено в момент выполнения теста. Это позволяет использовать один и тот же тест в разных средах без необходимости изменения исходного кода.

Как настроить переменные окружения

1. Использование .env файла

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

Пример файла .env:

BASE_URL=https://example.com
API_KEY=your-api-key-here

Затем в JavaScript файле необходимо загрузить эти переменные. Для этого можно использовать библиотеку dotenv, которая автоматически подгружает переменные окружения из .env в процесс.

Установка:

npm install dotenv

Загрузка переменных в коде:

require('dotenv').config();

console.log(process.env.BASE_URL);  // https://example.com

2. Установка переменных окружения в процессе выполнения

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

Пример запуска тестов с переменными окружения:

BASE_URL=https://test.example.com API_KEY=your-api-key node test.js

В коде можно получить доступ к этим переменным через process.env:

console.log(process.env.BASE_URL);  // https://test.example.com

Применение переменных окружения в Playwright

В контексте Playwright переменные окружения часто используются для хранения данных конфигурации и аутентификации.

Конфигурация тестов

В Playwright можно настроить параметры браузера, такие как baseURL или параметры авторизации, через переменные окружения. Это позволяет легко переключать конфигурацию между различными средами.

Пример настройки Playwright с использованием переменных окружения:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext({
    baseURL: process.env.BASE_URL,  // Переменная окружения для URL
  });

  const page = await context.newPage();
  await page.goto('/');  // Страница откроется по baseURL
  await browser.close();
})();

Авторизация с использованием переменных окружения

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

Пример авторизации в тесте:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const context = await browser.newContext();
  const page = await context.newPage();

  await page.goto(`${process.env.BASE_URL}/login`);
  await page.fill('#username', process.env.USERNAME);  // Логин из переменной окружения
  await page.fill('#password', process.env.PASSWORD);  // Пароль из переменной окружения
  await page.click('#login-button');
  
  // Проверка успешного входа
  await page.waitForSelector('#dashboard');
  await browser.close();
})();

Доступ к переменным окружения в тестах

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

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

const { request } = require('playwright');

(async () => {
  const apiResponse = await request.get(`${process.env.BASE_URL}/api/data`, {
    headers: {
      Authorization: `Bearer ${process.env.API_KEY}`,  // Токен из переменной окружения
    },
  });

  const responseBody = await apiResponse.json();
  console.log(responseBody);
})();

Безопасность и конфиденциальность данных

Одним из важнейших аспектов работы с переменными окружения является защита конфиденциальных данных, таких как пароли, токены или ключи API. Такие данные никогда не должны быть зафиксированы в исходном коде. Использование .env файлов и переменных окружения позволяет избежать этого риска.

Важно, чтобы файл .env не попадал в систему контроля версий. Для этого добавьте его в .gitignore:

# .gitignore
.env

В случае использования CI/CD систем переменные окружения обычно задаются в настройках пайплайна, что также минимизирует риск утечек данных.

Работа с переменными окружения в CI/CD

При интеграции тестов с CI/CD системами (например, Jenkins, GitHub Actions или GitLab CI) можно настроить переменные окружения в конфигурационных файлах этих систем. Это позволяет использовать разные значения переменных для различных этапов жизненного цикла разработки: тестирование, деплой, продакшн и т.д.

Пример настройки переменных окружения в GitHub Actions:

name: Playwright Tests

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      BASE_URL: https://staging.example.com
      API_KEY: ${{ secrets.API_KEY }}
    steps:
      - uses: actions/checkout@v2
      - name: Install Dependencies
        run: npm install
      - name: Run Playwright Tests
        run: npx playwright test

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

Заключение

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