Environment — это глобальная или локальная переменная?

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

Ответ

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

  1. Глобальные (системные) переменные окружения:

    • Устанавливаются на уровне операционной системы (например, через setx в Windows или export в .bashrc/.zshrc в Linux/macOS).
    • Доступны всем процессам и пользовательским сессиям в системе.
    • Пример: PATH, JAVA_HOME, HOME.
  2. Локальные (процессные) переменные окружения:

    • Устанавливаются для конкретного процесса или сессии (например, в терминале или скрипте).
    • Видны только этому процессу и его дочерним процессам.
    • Пример: Переменные, заданные перед запуском команды в терминале (API_URL=test.com python test.py) или внутри скрипта/теста.

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

  • Управление конфигурацией: Разделение настроек для разных сред (dev, staging, prod) через переменные.
  • Хранение секретов: Ключи API, пароли к базам данных (никогда не хранятся в коде!).
  • Параметризация тестов: Указание URL тестового сервера, времени ожидания и т.д.

Пример работы с переменными окружения в Python-тестах:

import os

# Установка локальной переменной для текущего процесса (например, в setUp)
os.environ["TEST_ENVIRONMENT"] = "STAGING"
os.environ["DB_TIMEOUT"] = "30"

# Чтение переменной окружения с значением по умолчанию
db_host = os.getenv("DATABASE_HOST", "localhost")  # Если переменной нет, вернётся 'localhost'
test_env = os.getenv("TEST_ENVIRONMENT")

# Использование в тесте для условного выполнения
def test_payment_gateway():
    if os.getenv("TEST_ENVIRONMENT") == "STAGING":
        # Выполнить тесты только на staging-среде
        response = call_staging_payment_api()
        assert response.status_code == 200
    else:
        pytest.skip("Test runs only in STAGING environment")

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