Тестирование — важный этап разработки программного обеспечения. Из этой статьи вы узнаете, как с помощью Docker можно легко и удобно настроить тестирование программ в виртуальных средах.
Что такое Docker?
Docker — это платформа, обеспечивающая виртуализацию на уровне операционной системы. Она упрощает создание, развёртывание и запуск приложений с помощью контейнеров.
Контейнер представляет собой как бы “чистую” операционную систему с библиотеками, программами и настройками. Docker позволяет создавать такие контейнеры поверх основной операционной системы, а за их работу отвечает специальное программное обеспечение — движок Docker.
Что такое образы и контейнеры в Docker?
В основе работы Docker лежат образы. Образ — это небольшой, автономный исполняемый пакет, в котором содержится всё необходимое для работы приложения.
Контейнер — это рабочая версия образа, которая создаётся во время его запуска. Проще говоря, образы превращаются в контейнеры, когда они работают.
Как установить Docker?
- Перейдите на сайт Docker Docs.
- Проверьте, поддерживает ли ваша система Docker, просмотрев системные требования.

Установка Docker для Mac
- Загрузите и установите Docker.
- После установки вы увидите соответствующий значок в системе. Нажмите на него, и он появится в диспетчере задач.
- При запуске сначала отобразится статус “Docker Desktop is starting“, который затем сменится на “Docker Desktop Running“.
- Чтобы убедиться, что Docker установлен, выполните команду $ docker —version.
Что такое DockerHub?
DockerHub — это сервис от Docker, который позволяет находить и делиться образами контейнеров с командой. Для его использования нужно зарегистрироваться.
DockerHub предоставляет следующие основные функции:
- Репозитории. Возможность загружать и скачивать образы контейнеров.
- Команды и организации. Управление доступом к приватным репозиториям образов.
- Официальные образы. Доступ к качественным образам, предоставленным Docker.
- Образы в Publisher. Доступ к качественным образам, предоставленным сторонними разработчиками.
- Сборки (Builds). Автоматическое создание образов контейнеров из GitHub- и Bitbucket-репозиториев и загрузка их в DockerHub.
- Вебхуки (Webhooks). Автоматическое выполнение действий после успешной загрузки в репозиторий для интеграции с другими сервисами.
Регистрация в DockerHub
Настройка контейнера Docker для автоматизации тестов
1. Получение образов Selenium
Чтобы облегчить нам жизнь, Selenium уже разместил все образы, касающиеся этого проекта, на DockerHub. Эти образы можно напрямую загрузить и использовать на своём компьютере.
2. Скачивание образов
Для работы с образами нужно запомнить несколько команд.
Получение информации о работающих контейнерах:
$ docker ps
Выгрузка образа из реестра:
$ docker pull <image name=»»></image>
Пример:
$ docker pull selenium/standalone-chrome
Просмотр списка образов:
$ docker images
Загрузка образов в Docker
3. Развёртывание образа в контейнер
$ docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:latest
Объяснение:
- docker run запускает новый контейнер.
- -d запускает контейнер в фоновом режиме.
- -p 4444:4444 перенаправляет порт 4444 вашего компьютера на порт 4444 контейнера. Собственно, это перенаправляет запуск тест-кейсов в контейнер.
- -v /dev/shm:/dev/shm использовать общую память хоста.
- selenium/standalone-chrome – имя образа.
- latest – версия образа.
Развёртывание образа в контейнере
Аналогично можно создать контейнеры для других браузеров.
Важно: помните, что в каждый отдельный момент времени на одном порту может работать только один контейнер.
4. Остановка контейнера
$ docker stop <container id=»»></container>
Docker + Selenium (TestNG)
Для того чтобы запускать тесты удаленно, нужно использовать класс RemoteWebdriver. Этот класс принимает два аргумента: URL (порт, на котором будет запускаться тест) и желаемые параметры (например, браузер).
Вот пример простого теста, который будет запускаться в контейнере, который мы создали выше:
Выполнение тестового сценария в контейнере
Docker + Selenium Grid
Selenium Grid — это инструмент, который помогает запускать тесты в разных операционных системах и браузерах.
В основе его архитектуры лежит использование хаба и подсоединяющихся к нему узлов (см. рисунок ниже). Основной недостаток этого подхода заключается в том, что для него требуется много виртуальных машин.
Но при использовании Docker вместо виртуальных машин можно использовать контейнеры, где все узлы будут работать на одной операционной системе.
Selenium Grid с Docker и без него
Как создать хаб и узлы с помощью файла Docker compose?
Для настройки хаба и узлов можно использовать один файл — Docker compose file, имеющий расширение .yaml.
Для создания хаба в этом файле, нужно развернуть образ selenium/hub в контейнере.
В следующем примере создаются два узла: один для Chrome, другой для Firefox. Они подключаются к хабу с помощью параметра depends_on.
Создание хаба и узлов
Сохраните этот файл в системе, перейдите в командную строку и выполните следующую команду:
$ docker-compose -f <file_name> up</file_name>
Чтобы проверить, что узлы запущены и работают, после запуска файла Docker Compose перейдите по адресу, указанному в разделе “Nodes should register to” на изображении ниже:
Проверка узлов
Grid console
Если нужно выполнить 3 теста в Chrome, но доступен только один узел Chrome, можно увеличить количество узлов до 5 с помощью команды:
$ docker-compose scale=5
После этого все тесты будут распределены по разным узлам, что ускорит выполнение.
Grid Console
Тестирование в Chrome с помощью Docker
Преимущества использования Selenium с Docker
Комбинация Docker и Selenium значительно упрощает работу автоматизаторам. Использование Docker позволяет:
- Запускать тесты на своей системе даже при отсутствии необходимой архитектуры
- Выполнять автоматизированные тесты параллельно в разных браузерах
- Избавиться от необходимости управлять JAR-файлами и загружать их вручную
- Проводить масштабные тесты, экономя время и ресурсы
Перевод статьи «How to use Docker for Automation Testing?».