Ответ
Тестовое окружение (Test Environment) — это выделенная, изолированная инфраструктура (серверы, базы данных, сети, конфигурации), на которой развернута копия программного продукта для проведения проверок. Оно имитирует рабочую (продакшен) среду, но использует тестовые данные и часто имеет включенные отладочные функции.
Зачем нужны отдельные тестовые окружения?
- Изоляция: Тестирование не мешает работе реальных пользователей.
- Контроль: Возможность сброса данных, отката версий, детального логирования.
- Безопасность: Использование тестовых платежных шлюзов, API-ключей и т.д.
Типичная иерархия окружений в процессе разработки:
-
Development (Dev):
- Цель: Ранняя интеграция и отладка кода разработчиками.
- Характеристики: Может быть нестабильным, содержит последние изменения из всех веток. База данных часто сбрасывается или заполняется синтетическими данными.
-
Testing/QA:
- Цель: Проведение полноценного тестирования QA-инженерами (функциональное, регрессионное).
- Характеристики: Стабильная версия кандидата на релиз. Конфигурация максимально приближена к продакшену, но на отдельном hardware/virtual machines.
-
Staging/Pre-production:
- Цель: Финальная проверка перед выпуском. Часто используется для UAT (User Acceptance Testing) и performance-тестов.
- Характеристики: Почти полный клон продакшена: аналогичное железо, конфигурация, данные (обезличенные). Отключены отладочные логгирования.
-
Production (Prod):
- Цель: Рабочая среда для реальных пользователей.
- Характеристики: Высокая доступность, мониторинг, реальные данные.
Пример конфигурации тестового окружения с использованием Docker:
Файл docker-compose.test.yml позволяет быстро поднять изолированное окружение.
version: '3.8'
services:
web_app_test:
image: my-application:test-latest # Специальная теговая версия для тестов
container_name: app_test
environment:
- NODE_ENV=test
- DB_HOST=postgres_test
- DB_NAME=app_test_db
- DEBUG=False # В staging должно быть False
- API_BASE_URL=https://api.sandbox.payments.com # Тестовый платежный шлюз
ports:
- "8080:80"
depends_on:
- postgres_test
postgres_test:
image: postgres:15-alpine
container_name: postgres_test
environment:
- POSTGRES_DB=app_test_db
- POSTGRES_USER=test_user
- POSTGRES_PASSWORD=test_password
volumes:
- ./test_db_init.sql:/docker-entrypoint-initdb.d/init.sql # Скрипт для наполнения тестовыми данными
- test_db_data:/var/lib/postgresql/data # Постоянное хранилище для данных между запусками
volumes:
test_db_data:
Ключевые отличия от продакшена: Использование тестовых сертификатов, отладочных флагов, заглушек (mocks/stubs) для внешних сервисов и отдельной, не производственной, базы данных.