Что такое тестовое окружение и какие типы окружений обычно выделяют?

«Что такое тестовое окружение и какие типы окружений обычно выделяют?» — вопрос из категории Веб-тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестовое окружение (Test Environment) — это выделенная, изолированная инфраструктура (серверы, базы данных, сети, конфигурации), на которой развернута копия программного продукта для проведения проверок. Оно имитирует рабочую (продакшен) среду, но использует тестовые данные и часто имеет включенные отладочные функции.

Зачем нужны отдельные тестовые окружения?

  • Изоляция: Тестирование не мешает работе реальных пользователей.
  • Контроль: Возможность сброса данных, отката версий, детального логирования.
  • Безопасность: Использование тестовых платежных шлюзов, API-ключей и т.д.

Типичная иерархия окружений в процессе разработки:

  1. Development (Dev):

    • Цель: Ранняя интеграция и отладка кода разработчиками.
    • Характеристики: Может быть нестабильным, содержит последние изменения из всех веток. База данных часто сбрасывается или заполняется синтетическими данными.
  2. Testing/QA:

    • Цель: Проведение полноценного тестирования QA-инженерами (функциональное, регрессионное).
    • Характеристики: Стабильная версия кандидата на релиз. Конфигурация максимально приближена к продакшену, но на отдельном hardware/virtual machines.
  3. Staging/Pre-production:

    • Цель: Финальная проверка перед выпуском. Часто используется для UAT (User Acceptance Testing) и performance-тестов.
    • Характеристики: Почти полный клон продакшена: аналогичное железо, конфигурация, данные (обезличенные). Отключены отладочные логгирования.
  4. 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) для внешних сервисов и отдельной, не производственной, базы данных.