Тестирование программного обеспечения представляет собой область, которая постоянно меняется. Поскольку у тестировщиков часто ограничено время для тестирования программного обеспечения, инженеры по обеспечению качества часто выбирают автоматизацию, чтобы гарантировать результаты, способствующие улучшению качества программного обеспечения.
Docker это технология, которая создает легкую и быструю среду для приложений, в отличие от виртуальных машин (VM). Контейнеризация используется в связке с инструментами для автоматизированного тестирования, такими как Selenium и WebDriver.
С появлением стратегии тестирования с несколькими контейнерами Docker значительно изменил процесс интеграции тестирования в цикл CI/CD. Для упаковки зависимостей приложений можно использовать операционную среду, свободную от внешних вмешательств, что помогает избежать проблем в процессе тестирования.
Итак, что же такое Docker?
Docker — это «платформа, предназначенная для упрощения создания, обмена и запуска современных приложений» (docker.com).
Было ли у вас когда‑то, что вы...
Установили Java 8 и Chrome версии 65 на своем локальном компьютере.
Написали нескол��ко тестовых скриптов и выполнили их.
После этого скопировали скрипты на удаленную машину.
Попробовали запустить их через Jenkins.
И вот, запуская тесты, видите, что удаленная машина выбрасывает странные ошибки...
Гуглите решение и находите «There's a version mismatch.»
Было такое? Тогда для вас есть хорошие новости. Решить эту проблему довольно просто и все что вам нужно это скачать docker и он создаст виртуальную машину с необходимыми зависимостями.
Итак, Docker — это инструмент, который позволяет создавать, разворачивать и запускать приложения с учетом всех зависимостей и среды выполнения. Как только вы настроите виртуальную машину, вы сможете передать её любому человеку с установленным Docker, и все будет работать как нужно.
Как справляться с проблемами, связанными с инфраструктурой, используя Docker?

Предположим, у нас есть удаленная машина, на которой установлен Java 8, тестовый скрипт, а также Selenium jar и TestNG jar. Ваш тестовый скрипт может быть настроен на подключение к другой машине (сетка/действующая как Selenium Hub), которая содержит несколько узлов (Chrome, Firefox и другие), как показано на изображении выше. В таких настройках вы можете столкнуться с различными инфраструктурными проблемами (например, с нехваткой памяти и так далее).
Что может сделать Docker в этом случае?

Всего за несколько секунд Docker поднимет всю инфраструктуру для запуска вашего тестового скрипта и подключит все узлы, такие как Chrome или Firefox.
Терминология
Термин | Описание | Похожий термин в Java |
Dockerfile (без расширения) | Инфраструктура в формате кода | java |
Build | Создание снимка образа из Dockerfile | compile/package |
Image | Снимок виртуальной машины | class/.jar |
Tag | Версия образа/релиза | версия jar |
Container | Легковесная виртуальная машина, созданная из конкретной версии образа. Мы можем создать несколько контейнеров из одного и того же образа | instances/objects |
DockerHub | Репозиторий образов | Репозиторий Maven |
Docker команды
docker pull image — скачать образ из DockerHub.
docker images — просмотреть все образы на вашем компьютере.
docker ps — просмотреть все активные контейнеры.
docker ps ‑a — просмотреть все контейнеры.
docker run image — создать контейнер из образа.
Сравнение между контейнерами и виртуальными машинами

Контейнеры позволяют упаковывать только те элементы, которые необходимы для вашего приложения или сервиса, без необходимости создавать полноценную операционную систему, как это происходит в виртуальных машинах (VM). Это означает, что контейнеры работают быстрее и являются более легковесными.
Давайте создадим контейнер с использованием Docker

Наша настройка сетки состоит из трех основных компонентов:
Docker‑машины, на которых работает Docker Engine
Hub
Контейнеры Node, содержащие браузеры, которые подключаются к Hub
Смотря на диаграмму выше, вы получите представление о том, что мы будем создавать и как все это будет связано.
Контейнеры с нативной интеграцией работают только с той же операционной системой хоста. Однако существуют обходные пути, такие как использование виртуальных машин (VM). Docker создаст и будет работать с контейнерами в виртуальной машине Linux, если ваша операционная система хоста Windows.
Вместо VirtualBox или Hyper‑V используется гипервизор, специфичный для Windows, для работы с виртуальной машиной Linux. Рабочую виртуальную машину Linux можно увидеть, запустив Hyper‑V Manager. Эта виртуальная машина запускает Docker‑демон, который предоставляет необходимые функции для работы контейнеров на базе Linux.
Кроме того, вы можете наблюдать, как выполняется «Moby Linux» с Docker Linux‑демоном, если установите Docker для Windows и выполните команду
docker versionТочно так же можно запустить контейнер на базе Windows на виртуальной машине Windows, которая работает на хост‑системе Linux или macOS.
Как Docker упрощает тестирование программного обеспечения?
Прежде всего вам не требуется писать специальные скрипты и вручную развертывать сборку, окружение или другие инструменты на нескольких виртуальных машинах
Если бы вы не использовали Docker, вам бы пришлось писать скрипты или вручную настраивать все требования на нескольких виртуальных машинах. Например, для настройки автоматизации вам нужно было бы установить Java, Ruby, Python, RSpec, Maven, Selenium, различные браузеры и другие утилиты. Из‑за зависимости от платформ, сложности скриптов и значительных требований к обслуживанию, это не является надежным решением.
С помощью Docker можно создать образ с необходимыми зависимостями и поместить все необходимые инструменты или зависимости в контейнеры, которые могут запускать любой код или приложение напрямую, избегая этих недостатков. Нет необходимости заранее выделять оперативную память для контейнеров, так как Docker предоставляет предсказуемое и повторяемое тестовое окружение. Контейнеры работают на хост‑операционной системе или устройстве, которое хостит Docker‑образ.
Последовательное развертывание окружения способствует более практичной доставке программного обеспечения
Мы можем оценить и объединить код фичи, как только команда разработки отправит код в ветку фичи, автоматизированные тесты будут выполнены и пройдены успешно. Мы оцениваем здоровье сборки, снова запуская автоматические тесты.
Часто повторяющееся тестирование указывает на то, что этот набор кодов фич готов к выпуску в рабочее окружение. Не стоит полагаться на инструменты CI и процессы с недостаточным покрытием тестами, что может привести к дефектам и ошибкам после релиза. На протяжении всего жизненного цикла доставки ПО контейнеры предлагают надежную среду развертывания, которую можно использовать.
Контейнеры сокращают количество внешних переменных окружения, которые нужно тестировать
Так как большинство зависимостей приложения и конфигурационных данных находятся внутри контейнера, количество внешних переменных окружения сокращается. Таким образом, непрерывная интеграция и тестирование выполняются одновременно, обеспечивая стабильную работу приложения как в тестовом, так и в производственном окружении.
Контейнеры позволяют проводить тестирование в разных контейнерах и изолированных средах, тестируя приложение как на Windows, так и на Linux. Вы можете повторно использовать контейнеры для тестирования, когда код приложения нужно обновить, а новые тесты нужно выполнить.
Новый контейнер всегда можно создать во время выполнения, а контейнер можно всегда удалить.
Вероятность того, что приложение будет вести себя по‑другому в продакшн‑окружении, минимальна, поскольку окружение остается неизменным.
Гибкость и простота обслуживания
Поскольку все контейнеры работают в изоляции, легко поддерживать тесты и окружения. Даже если ошибка возникает в одном из контейнеров, остальные контейнеры не затрагиваются.
��ы всегда можете создать новый контейнер во время выполнения. Запуск нового приложения или автоматизационных наборов в новом контейнере это простая задача.
Повышенная эффективность, более быстрое доставление и меньшие затраты
Контейнеризация повышает эффективность и скорость SDLC, что выгодно для бизнеса. Автоматизация важный аспект обеспечения качества, и Docker увеличивает эффективность, уменьшая зависимость от инфраструктуры. Docker экономит деньги компании, значительно снижая затраты на инфраструктуру.
Подытожив, можно сказать, что Docker позволяет тестировать в контейнерах и изолировать тесты для разработки и развертывания. Тестирование программного обеспечения становится предсказуемым, обеспечивая, что все, что работает на вашей системе, также будет работать для ваших конечных пользователей.

Если хотите системно вырасти из «проверяю руками» в QA-инженера, обратите внимание на курс OTUS «QA Engineer. Basic»: веб-тестирование, SQL, основы автоматизации и рабочий стек (Jira, Git, Docker, Postman, DevTools). Фокус — на практике и понимании, как устроено тестовое окружение и процесс качества в команде.
А чтобы узнать больше о формате обучения и задать вопросы экспертам, приходите на бесплатные демо-уроки:
27 января в 20:00. «Не упусти баги: разбор функциональных и нефункциональных тестов». Записаться
11 февраля в 20:00. «Жизненный цикл тестирования ПО (STLC - Software Testing Lifecycle)». Записаться
19 февраля в 20:00. «Находим баги онлайн». Записаться
