Ответ
Применял Docker для создания изолированных, воспроизводимых и консистентных тестовых окружений. Это решало проблему "у меня работает" и ускоряло настройку инфраструктуры для тестов.
Основные сценарии использования:
1. Локальное тестовое окружение "в один клик":
Использовал docker-compose.yml для развертывания всего стека приложения (frontend, backend, БД, кэш, message broker) на локальной машине или CI-сервере.
# docker-compose.test.yml
version: '3.8'
services:
postgres_test:
image: postgres:15
environment:
POSTGRES_DB: test_db
POSTGRES_PASSWORD: test_pass
ports:
- "5433:5432"
app_test:
build:
context: .
dockerfile: Dockerfile.test
depends_on:
- postgres_test
environment:
DB_HOST: postgres_test
2. Изоляция тестовых зависимостей:
- Запуск автотестов в чистых контейнерах, что гарантирует отсутствие side-effects от предыдущих прогонов.
- Тестирование с разными версиями БД или сторонних сервисов.
3. Интеграция с CI/CD (Jenkins, GitLab CI):
- Запуск пайплайна в Docker-контейнере с предустановленными инструментами (Python, Node.js, браузеры для Selenium).
- Сборка и пушинг Docker-образов с тестовыми утилитами в registry команды.
4. Написание Dockerfile для тестов:
# Dockerfile для запуска Python-тестов
FROM python:3.11-slim
WORKDIR /app
# Копируем зависимости и устанавливаем их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копируем код приложения и тесты
COPY src/ ./src/
COPY tests/ ./tests/
# Команда по умолчанию — запуск тестов
CMD ["pytest", "tests/", "-v", "--tb=short"]
5. Mock-сервисы и тестирование интеграций:
- Использование готовых образов (например,
wiremock/wiremock) для заглушки внешних API. - Запуск специализированных БД (например,
redis) для тестирования кэширования.
Результат: Значительное ускорение onboarding-а новых членов команды, полная воспроизводимость окружений и упрощение отладки проблем, связанных с различиями в средах.