Тесты в Docker

Тема дорожной карты · QA-инженер

Запуск тестов в Docker означает упаковку тестового окружения — зависимостей, бинарников браузеров, тестового фреймворка и тестируемого приложения — в контейнеры, чтобы выполнение тестов было воспроизводимым, изолированным и идентичным на ноутбуках разработчиков, CI-серверах и staging-окружениях. Типичная настройка использует docker-compose для запуска приложения вместе с базой данных и затем выполнения набора тестов: docker-compose up -d app db && docker-compose run --rm tests pytest -v запускает pytest-набор в выделенном контейнере, который использует ту же Docker-сеть, что и приложение. Для UI-автоматизации на Selenium, Selenium Grid запускается как Docker-сервис (selenium/hub + образы selenium/node-chrome), предоставляя пул узлов браузеров; Playwright и Cypress публикуют собственные официальные Docker-образы (mcr.microsoft.com/playwright и cypress/included), включающие все необходимые браузерные зависимости, устраняя проблему «у меня работает». Запуск тестов в Docker органично встраивается в пайплайны Jenkins (docker.image('pytest:latest').inside { sh 'pytest' }) и рабочие процессы GitHub Actions (container: python:3.12), обеспечивая запуск заданий JUnit 5, TestNG, REST Assured и k6 в чистом детерминированном окружении при каждом прогоне CI. Выполнение тестов на основе Docker также позволяет параллельно распределять тесты по нескольким контейнерам, сокращая реальное время выполнения для больших наборов тестов Playwright или Appium.

Как это работает

Тесты в Docker интегрирует QA в dev-пайплайн: unit + integration + smoke — на каждый PR, regression — еженочно, деплой в staging триггерит acceptance-тесты, prod-деплои гейтятся прохождением suite. Инструменты: GitHub Actions, GitLab CI, Jenkins, TeamCity (популярен в РФ). Reporting-тулы: Allure, ReportPortal, html-отчёты. Test-среды: ephemeral (per-PR preview), персистентный staging. Test-data: фабрики, fixtures, snapshot+restore БД.

Когда применять

Сначала unit + smoke в PR-сборки — быстрый фидбек важен. Regression еженочно — только после стабильной suite. Allure или ReportPortal — для общей видимости результатов в команде. Контейнеризуйте test-среду (Docker, Testcontainers) — "работает в CI, не локально" прекратится. Определите, какие падения блокируют merge — не каждый flake должен.

Типичные ошибки

Ловушки Тесты в Docker: 30-минутные PR-сборки (разработчики переключают контекст, продуктивность падает); CI green ≠ всё работает (тестировали то, что тестировали, не всё); игнор flake ("retry до прохода" прячет реальные баги); нет reporting-слоя (все гоняют тесты, никто не видит тренд); тесты требуют локальных секретов/credentials, не работающих в CI.

Связанные понятия

Полезные ресурсы