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

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

Многие тестировщики испытывают трудности при проектировании изолированного тестирования. К счастью, сегодня существуют отличные инфраструктурные решения, например docker-compose. Цель данной статьи – предоставить альтернативный подход к автоматизированному тестированию с применением докера. Автоматизированное тестирование будет проводиться отдельно от демо-площадки с помощью инструментов GitLab CI и Docker Compose в качестве средств для сборки контейнеров.

Это руководство затронет лишь малую часть возможностей и автоматизации docker, включая краткий обзор этапов работы и принципов запуска тестов с использованием docker-compose, а также обзор преимуществ и недостатков данного подхода.

Смотрите также: “Введение в Docker для автоматизации тестирования”

Содержание

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

Плюсы автоматизированного тестирования с докером

  • Обеспечивает изолированную работу (возможность одновременного использования демо-площадки во время прогона автотестов)
  • Отдельная база данных (не обязательно)
  • Собирает проект и независимо тестирует его
  • Язык программирования не имеет значения
  • Позволяет хранить артефакты (скриншоты, логи и т. д.)
  • Позволяет просматривать логи
  • Дает возможность применять отдельные шаги как shell-скрипты

Минусы автоматизированного тестирования с докером

  • Занимает много времени
  • Требует использования встроенного, либо отдельного исполнителя (runner) для запуска пайплайна
  • Приложение, упакованное в докер / докеризация приложения

Три этапа функционирования подхода

  1. Создание собственной базы данных (не является обязательным этапом; вы можете работать с пустой базой данных)
  2. Непосредственное создание docker compose для автоматизированного тестирования, так как в данном подходе мы будем использовать контейнеры и Dockerfile
  3. Создание файла gitlab.ci

Все эти утверждения и аспекты будут более подробно рассмотрены в следующих абзацах для лучшего понимания темы.

Основы докера для автоматизированного тестирования

На практике автоматизация использует множество методов запуска автотестов. Тесты проводятся на компьютере, сервере или сервисе, таком как Jenkins или GitLab CI, а результаты отображаются на демо-площадке. Однако при этом демо-окружение может быть недоступно для других пользователей. Другой вариант – создать отдельное окружение и использовать его только для автотестов. Хотя доступ к площадке будет выдаваться по запросу, у пользователя или заказчика не всегда будет возможность его получить. Однако есть еще одна стратегия, которая сочетает в себе преимущества предыдущих подходов.

Ниже мы рассмотрим, как изолировать автотесты на Java с Selenium. Другие языки, такие как JavaScript или Python, или другие библиотеки, также могут быть использованы в таком подходе, который позволяет автоматизировать тестирование с помощью docker compose.

Что нужно учитывать при использовании докера для автоматизированного тестирования

Прежде чем узнать больше о Docker в автоматизации тестирования, давайте разберемся в терминах. Docker – это программная платформа, которая облегчает быструю разработку, тестирование и развертывание приложений. Docker compose в данном случае используется для управления несколькими контейнерами одновременно; кроме того, он требует использования последней  версии веб-утилиты — GitLab Container Registry, безопасного частного реестра для образов Docker.

Основные преимущества автоматизированного подхода к тестированию с использованием docker-compose:

  1. Рабочая демо-площадка. Запуская конвейер, содержащий тесты для Демо или Продакшн, вы можете одновременно проводить другие тесты или вносить изменения на этих площадках, независимо от того прогоняются на них автотесты или нет
  2. Использование того же контента и сервисов для вашей Демо/Продакшн версии
  3. Возможность добавлять хранилища артефактов (скриншоты или логи) и планировать автозапуск тестов docker compose в GitLab.
  4. Независимость от языка программирования, на котором написаны тесты, или от используемых библиотек
  5. Использование собственной базы данных позволяет связывать тесты непосредственно с ней, что особенно ценно, если ваше приложение включает множество динамических структур или взаимосвязанных таблиц
  6. Возможна работа с shell-скриптами

Несмотря на свои преимущества, использование docker для автоматизации тестирования имеет определенные недостатки:

  1. Тестирование занимает много времени и ресурсов, что негативно сказывается на производительности. Сначала формируется проект с интегрированной базой данных, и затем в нем запускаются тесты 
  2. Необходимо иметь проект в докере, иначе вам придется выполнять задачи вручную
  3. Так же, как и в случае с другими системами автотестирования, работающими в рамках пайплайна CI/CD, наши тесты нуждаются в выделенном исполнителе (runner)

Как запустить docker compose test: три этапа изолированного подхода

Процесс разработки изолированного подхода состоит из трех этапов.

Шаг 1: создайте собственную базу данных – в нашем случае использовался MySQL. Для начала тестирования с docker compose, необходимо создать базу данных, сделать её дамп и поместить файл дампа в корневую директорию проекта.

Используйте дамп и запустите миграции как отдельный скрипт dbScript.sh:

#!/bin/bash
sleep 20
echo "connected to DB"
docker exec -i db mysql -h 127.0.0.1 -u root -pwebbylab webbylab < $(pwd)/etc/db/webbylab.sql

Шаг 2: создайте Dockerfile, чтобы собрать образ (image):

FROM markhobson/maven-chrome:jdk-11

Образ, который использовался в примере для запуска тестов на Java

COPY . .

Далее необходимо создать файл docker compose.yml:

version: '3.7'
services:
 automation:
   image: gitlab.com:leshamalakhov/automationdocker
   container_name: automationTests
   command: mvn clean test -Dtest=TestingFile
   environment:
     URL: http://localhost:3000
app:
   image: hellrazers/app
   container_name: app
   restart: always
   environment:
       APP_DB_HOST: db
       APP_PORT: 3000
       APP_DB_PORT: 3306
       MYSQL_ROOT_PASSWORD: webbylab
       MYSQL_DATABASE: webbylab
       MYSQL_USER: webbylab
       MYSQL_PASSWORD: webbylab
   ports:
       - 3000:3000
   depends_on:
       - db
 
 
 db:
   image: mysql:5.7
   container_name: db
   expose:
     - 3306
   environment:
       MYSQL_ROOT_PASSWORD: webbylab
       MYSQL_DATABASE: webbylab
       MYSQL_USER: webbylab
       MYSQL_PASSWORD: webbylab

В зависимости от проекта, docker compose может включать и другие сервисы.

Шаг 3: для авторизации в GitLab необходимо создать отдельные команды в gitlab-ci; вы можете экспортировать их в виде gitlabLogin.sh:

#!/usr/bin/env bash
 
docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY"
docker build . -t gitlab.com:leshamalakhov/automationdocker
docker push gitlab.com:leshamalakhov/automationdocker

Последний файл, который необходимо создать – это .gitlab-ci.yamll, содержащий инструкции для GitLab runner:

image:ci-image //здесь следует использовать образ для сборки проекта (если он доступен)

//dind - docker wrapper, поскольку используется сервис Docker-in-Docker

services:
 - docker:dind
 
cache:
 paths:
   - .m2/repository/
   - target/
 
stages:
 - test
 
test:
 stage: test
 script:
   - ./bin/gitlabScript.sh
   - docker-compose up -d app
   - ./bin/dbScript.sh
   - docker-compose run --rm automation
   - docker-compose down
 allow_failure: true

Заключение

Подводя итог, можно сказать, что в этой статье мы рассмотрели альтернативный подход, который позволяет автотестам стать полноценным самостоятельным приложением без использования демо окружения. Запуск docker compose test может потребовать дополнительных зависимостей от сервисов. Например, для запуска тестов приложению нужен доступный экземпляр базы данных. Gitlab CI Service упрощает понимание и настройку ежедневного запуска тестов. В него встроена функция “Schedules”, которая позволяет хранить артефакты, такие как логи, скриншоты и т.д. Докер также упростит установку дополнительных сервисов, таких как Adminer, Graffana, или сервисов, которые будут использоваться в вашем проекте.

Перевод статьи «Using Docker for Automation Testing: Guide of How to Run It».

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

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