Как настроить Docker для автоматизированного тестирования?

Тестирование — важный этап разработки программного обеспечения. Из этой статьи вы узнаете, как с помощью Docker можно легко и удобно настроить тестирование программ в виртуальных средах.

Что такое Docker?

Docker — это платформа, обеспечивающая виртуализацию на уровне операционной системы. Она упрощает создание, развёртывание и запуск приложений с помощью контейнеров.

Контейнер представляет собой как бы “чистую” операционную систему с библиотеками, программами и настройками. Docker позволяет создавать такие контейнеры поверх основной операционной системы, а за их работу отвечает специальное программное обеспечение — движок Docker.

Что такое образы и контейнеры в Docker?

В основе работы Docker лежат образы. Образ — это небольшой, автономный исполняемый пакет, в котором содержится всё необходимое для работы приложения.

Контейнер — это рабочая версия образа, которая создаётся во время его запуска. Проще говоря, образы превращаются в контейнеры, когда они работают.

Больше информации о Docker в нашем КАНАЛЕ "DOCKER ПРОСТЫМИ СЛОВАМИ"

Как установить Docker?

  • Перейдите на сайт Docker Docs.
  • Проверьте, поддерживает ли ваша система Docker, просмотрев системные требования.
Docker Docs, страница, где можно загрузить Docker для Mac.
Установка 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.
Регистрация в DockerHub

Настройка контейнера Docker для автоматизации тестов

1. Получение образов Selenium

Чтобы облегчить нам жизнь, Selenium уже разместил все образы, касающиеся этого проекта, на DockerHub. Эти образы можно напрямую загрузить и использовать на своём компьютере.

2. Скачивание образов

Для работы с образами нужно запомнить несколько команд.

Получение информации о работающих контейнерах:

$ docker ps

Выгрузка образа из реестра:

$ docker pull <image name=""></image>

Пример:

$ docker pull selenium/standalone-chrome‍

Просмотр списка образов:

$ docker images‍
Загрузка образов в Docker, вид в терминале
Загрузка образов в 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 и без него
Selenium Grid с Docker и без него

Как создать хаб и узлы с помощью файла Docker compose?

Для настройки хаба и узлов можно использовать один файл — Docker compose file, имеющий расширение .yaml.

Для создания хаба в этом файле, нужно развернуть образ selenium/hub в контейнере.

В следующем примере создаются два узла: один для Chrome, другой для Firefox. Они подключаются к хабу с помощью параметра depends_on.

Создание хаба и узлов в файле docker-compose.yaml.
Создание хаба и узлов

Сохраните этот файл в системе, перейдите в командную строку и выполните следующую команду:

$ docker-compose -f <file_name> up</file_name>‍

Чтобы проверить, что узлы запущены и работают, после запуска файла Docker Compose перейдите по адресу, указанному в разделе “Nodes should register to” на изображении ниже:

Проверка узлов
Проверка узлов
Grid console: слева во вкладке Browsers видим значок Chrome, справа - Firefox.
Grid console

Если нужно выполнить 3 теста в Chrome, но доступен только один узел Chrome, можно увеличить количество узлов до 5 с помощью команды:

$ docker-compose scale=5‍

После этого все тесты будут распределены по разным узлам, что ускорит выполнение.

Grid Console: количество узлов Chrome увеличилось до 5
Grid Console
Тестирование в Chrome с помощью Docker
Тестирование в Chrome с помощью Docker

Преимущества использования Selenium с Docker

Комбинация Docker и Selenium значительно упрощает работу автоматизаторам. Использование Docker позволяет:

  • Запускать тесты на своей системе даже при отсутствии необходимой архитектуры
  • Выполнять автоматизированные тесты параллельно в разных браузерах
  • Избавиться от необходимости управлять JAR-файлами и загружать их вручную
  • Проводить масштабные тесты, экономя время и ресурсы

Перевод статьи «How to use Docker for Automation Testing?».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *