Что такое переменные окружения?

«Что такое переменные окружения?» — вопрос из категории Linux и командная строка, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Переменные окружения (environment variables) — это пары «ключ-значение», доступные процессам в операционной системе. Они используются для динамической конфигурации среды выполнения, хранения путей, параметров и чувствительных данных.

Для QA-инженера они критически важны в следующих сценариях:

  • Конфигурация тестовых сред: Установка BASE_URL, API_ENDPOINT или BROWSER (например, export BASE_URL=https://staging.example.com). Это позволяет запускать одни и те же тесты против разных окружений (dev, staging, prod) без изменения кода.
  • Безопасное хранение секретов: Логины, пароли, API-токены и ключи доступа задаются как переменные окружения в CI/CD (например, Jenkins, GitLab CI), а не хранятся в репозитории тестов.
  • Управление поведением фреймворков: Например, переменная NODE_ENV=test может отключать логгирование или включать специальные плагины в инструментах для тестирования.

Практический пример в командной строке и скрипте:

# Установка переменной в сессии терминала (Linux/macOS)
export TEST_USER="qa_tester"
export HEADLESS="true"

# В Windows (Command Prompt)
set TEST_USER=qa_tester

# Использование в Bash-скрипте для запуска тестов
echo "Запуск тестов для пользователя $TEST_USER в headless-режиме..."
npm test
# Пример в Python-скрипте для автотестов
import os

# Получение значения переменной. Второй аргумент — значение по умолчанию.
base_url = os.getenv('BASE_URL', 'http://localhost:8080')
db_password = os.getenv('DB_PASSWORD')  # Секрет, задаётся только в CI/CD

print(f'Тестируем приложение по адресу: {base_url}')
# Если DB_PASSWORD не задана, получим None, что безопаснее, чем "зашитый" пароль в коде.

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