Ответ
Переменные окружения (Environment Variables) могут быть как глобальными (системными), так и локальными (процессными), в зависимости от контекста их определения и области видимости.
-
Глобальные (системные) переменные окружения:
- Устанавливаются на уровне операционной системы (например, через
setxв Windows илиexportв.bashrc/.zshrcв Linux/macOS). - Доступны всем процессам и пользовательским сессиям в системе.
- Пример:
PATH,JAVA_HOME,HOME.
- Устанавливаются на уровне операционной системы (например, через
-
Локальные (процессные) переменные окружения:
- Устанавливаются для конкретного процесса или сессии (например, в терминале или скрипте).
- Видны только этому процессу и его дочерним процессам.
- Пример: Переменные, заданные перед запуском команды в терминале (
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-системы и безопасно передаются в скрипты.