Составляли ли вы Docker-образы для тестирования?

«Составляли ли вы Docker-образы для тестирования?» — вопрос из категории CI/CD и DevOps, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, составлял. В контексте QA и автоматизации тестирования Docker-образы используются для создания изолированных и воспроизводимых сред для запуска тестов. Например, для сборки образа с автотестами на Python и Selenium.

Пример Dockerfile для тестового раннера:

FROM python:3.11-slim
WORKDIR /app

# Копируем зависимости и устанавливаем их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем код автотестов и тестовые данные
COPY ./tests ./tests
COPY ./test_data ./test_data

# Команда для запуска тестов (например, через pytest)
CMD ["pytest", "tests/", "-v", "--html=report.html"]

Сборка и использование:

# Сборка образа с тегами
docker build -t autotests:latest -t autotests:build-$BUILD_NUMBER .

# Запуск контейнера с тестами
docker run --rm autotests:latest

Ключевые практики для QA:

  • Использование .dockerignore для исключения артефактов сборки и отчетов из образа.
  • Многоэтапная сборка (multi-stage build) для создания минимальных образов, что ускоряет их передачу в CI/CD пайплайне.
  • Тегирование версий (autotests:build-123) для четкого отслеживания, какой сборке кода соответствуют результаты тестов.
  • Монтирование томов для сохранения отчетов о тестировании (allure-results, junit.xml) на хост-машину после завершения работы контейнера.