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

- Загрузите и установите Docker.
- После установки вы увидите соответствующий значок в системе. Нажмите на него, и он появится в диспетчере задач.
- При запуске сначала отобразится статус “Docker Desktop is starting“, который затем сменится на “Docker Desktop Running“.
- Чтобы убедиться, что Docker установлен, выполните команду
$ docker --version
.
Что такое DockerHub?
DockerHub — это сервис от Docker, который позволяет находить и делиться образами контейнеров с командой. Для его использования нужно зарегистрироваться.
DockerHub предоставляет следующие основные функции:
- Репозитории. Возможность загружать и скачивать образы контейнеров.
- Команды и организации. Управление доступом к приватным репозиториям образов.
- Официальные образы. Доступ к качественным образам, предоставленным Docker.
- Образы в Publisher. Доступ к качественным образам, предоставленным сторонними разработчиками.
- Сборки (Builds). Автоматическое создание образов контейнеров из GitHub- и Bitbucket-репозиториев и загрузка их в DockerHub.
- Вебхуки (Webhooks). Автоматическое выполнение действий после успешной загрузки в репозиторий для интеграции с другими сервисами.

Настройка контейнера Docker для автоматизации тестов
1. Получение образов Selenium
Чтобы облегчить нам жизнь, Selenium уже разместил все образы, касающиеся этого проекта, на DockerHub. Эти образы можно напрямую загрузить и использовать на своём компьютере.
2. Скачивание образов
Для работы с образами нужно запомнить несколько команд.
Получение информации о работающих контейнерах:
$ docker ps
Выгрузка образа из реестра:
$ docker pull <image name=""></image>
Пример:
$ docker pull selenium/standalone-chrome
Просмотр списка образов:
$ docker images

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 вместо виртуальных машин можно использовать контейнеры, где все узлы будут работать на одной операционной системе.

Как создать хаб и узлы с помощью файла 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” на изображении ниже:


Если нужно выполнить 3 теста в Chrome, но доступен только один узел Chrome, можно увеличить количество узлов до 5 с помощью команды:
$ docker-compose scale=5
После этого все тесты будут распределены по разным узлам, что ускорит выполнение.


Преимущества использования Selenium с Docker
Комбинация Docker и Selenium значительно упрощает работу автоматизаторам. Использование Docker позволяет:
- Запускать тесты на своей системе даже при отсутствии необходимой архитектуры
- Выполнять автоматизированные тесты параллельно в разных браузерах
- Избавиться от необходимости управлять JAR-файлами и загружать их вручную
- Проводить масштабные тесты, экономя время и ресурсы
Перевод статьи «How to use Docker for Automation Testing?».