Ответ
Да, регулярно пишу Dockerfile для изоляции и воспроизводимости тестового окружения. Это позволяет запускать автотесты в идентичной среде на любой машине и в CI/CD-пайплайне.
Пример Dockerfile для запуска набора Python-автотестов (UI + API):
# Используем официальный образ Python как базовый
FROM python:3.11-slim-buster
# Устанавливаем системные зависимости, необходимые для Selenium и других инструментов
RUN apt-get update && apt-get install -y
wget
gnupg
unzip
# Для headless Chrome
chromium
chromium-driver
fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf
libxss1
--no-install-recommends &&
rm -rf /var/lib/apt/lists/*
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /usr/src/app
# Копируем файл с зависимостями и устанавливаем их
# Это делается отдельным слоем для кэширования
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копируем весь проект (включая тесты, конфиги, тестовые данные)
COPY . .
# Указываем переменные окружения для тестов
ENV ENV=ci
PYTHONPATH=/usr/src/app
CHROME_BIN=/usr/bin/chromium
# Команда по умолчанию для запуска тестов через Pytest
CMD ["pytest", "./tests", "-v", "--tb=short", "--html=report.html", "--self-contained-html"]
Сопровождающий .dockerignore файл:
# Игнорируем ненужные для запуска тестов файлы
.git
__pycache__
*.pyc
.env
*.log
*.tmp
coverage.xml
.pytest_cache
htmlcov/
Практическое применение:
- Локальная разработка:
docker build -t autotests . && docker run autotests— позволяет быстро проверить, что тесты работают в чистом окружении. -
CI/CD (GitLab CI):
stages: - test autotests: stage: test image: docker:latest services: - docker:dind script: - docker build -t test-runner . - docker run --rm test-runner - Multi-stage сборка: Для разделения этапов сборки зависимостей и запуска, что уменьшает итоговый размер образа.
Это гарантирует, что все тесты запускаются в одинаковом окружении, независимо от операционной системы или глобальных настроек разработчика.