Учебное руководство по интеграционному тестированию с помощью Bitbucket Pipelines

Узнайте, как с помощью Bitbucket Pipelines запускать интеграционные тесты для конвейера со множеством сервисов, работающих в отдельных контейнерах Docker.
Тестирование является важнейшей частью непрерывной интеграции и непрерывной поставки. А если вы практикуете непрерывное развертывание, тестирование будет последней линией защиты от багов перед выпуском изменений клиентам. Модульные тесты, проверяющие отдельные методы и классы, являются отличным средством для первичного предотвращения проблем, но в дополнение к ним необходимо выполнять интеграционные тесты, которые обеспечивают правильное взаимодействие различных модулей приложения (сервера приложений, базы данных, кэша). В этом учебном руководстве будет показано, как с помощью Bitbucket Pipelines запускать интеграционные тесты для конвейера со множеством сервисов, работающих в отдельных контейнерах Docker.
Время
30 минут
Аудитория
Те, кто только начинает работу с непрерывной интеграцией и/или Bitbucket Pipelines
ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ
Node 4.6 или более новой версии для запуска приложения
Docker Community Edition v17.03 или новее для запуска MongoDB на локальном компьютере
Терминал для выполнения команды bash
Git для управления репозиторием и осуществления push обратно в Bitbucket Cloud
Шаг 1. Запуск образца приложения локально
Мы будем использовать простое приложение Node.js, которое отображает сообщение на домашней странице и регистрирует посещения в базе данных. Чтобы сосредоточить внимание на конфигурации Bitbucket Pipelines, можно просто клонировать приложение из терминала.
git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.gitТеперь перейдите в локальный репозиторий и выполните команду npm install, чтобы установить зависимости, требуемые приложением.
cd bitbucket-pipelines-services-tutorial
npm installПеред запуском приложения потребуется запустить новый экземпляр MongoDB. Благодаря Docker это просто сделать из терминала.
docker run --name mongodb -d -p 27017:27017 mongoЗатем запустите ваше приложение и перейдите по адресу http://localhost:3000 , чтобы увидеть его в действии.
npm start
Можно перейти по адресу http://localhost:3000/visits и убедиться, что посещение было корректно зарегистрировано в базе данных.

И наконец, давайте с помощью команды npm test убедимся в том, что в локальной среде тесты проходят успешно. Выполнение этой команды запускает два теста.
npm test
Этот образец приложения выполняет два разных теста.
Один тест, который проверяет, отображает ли приложение сообщение Hello World на главной странице.
Один тест, который убедится, что каждый раз, когда кто-либо обращается к домашней странице, в базе данных регистрируется новое посещение.
Первый тест может быть пройден, даже если база данных будет отключена, но второй тест, интеграционный, проверяет, правильно ли взаимодействует веб‑приложение с сервером базы данных. Его также можно считать функциональным тестом, так как он верифицирует некоторые бизнес‑требования приложения. Подробная информация о различных типах тестов приводится в нашем руководстве.
Далее мы посмотрим, как с помощью Bitbucket Pipelines можно автоматизировать тестирование приложения и настроить его для успешной работы с базой данных.
Шаг 2. Автоматическое выполнение тестов с помощью Bitbucket Pipelines
Начните с создания нового репозитория в своем аккаунте Bitbucket и измените удаленный URL-адрес для origin так, чтобы он указывал на ваш репозиторий Bitbucket.
git remote add bitbucket git@bitbucket.org:<account name>/<repository name>.git
git branch -m mainline
git push -u bitbucket mainlineЧтобы включить Bitbucket Pipelines, перейдите в раздел «Pipelines» в репозитории.

Можно использовать стандартный шаблон Javascript, приведенный на следующем экране. В нем уже будут команды npm install и npm test, которые необходимы для установки зависимостей и запуска комплекта тестов.

Файл bitbucket-pipelines.yml должен выглядеть примерно так.
image: node:16
pipelines:
default:
- parallel:
- step:
name: Build and Test
caches:
- node
script:
- npm install
- npm testСервис базы данных отсутствует, но мы добавим его позже.

После того, как вы выполните коммит своего файла, вы будете перенаправлены в раздел Pipelines своего репозитория, где увидите первый конвейер в процессе работы. Работа конвейера будет завершена неудачно, потому что второй тест не сможет корректно выполниться без подключения к базе данных. Если вы перейдете к своему конвейеру, то увидите экран, похожий на показанный ниже, где будет написано, что 1 тест пройден и 1 тест завершен неудачно.

В следующем разделе мы исправим эту проблему, добавив новое определение сервиса в конфигурацию Pipelines.
Шаг 3. Добавление определения сервиса для базы данных
Используя Bitbucket Pipelines, помимо основного приложения, выполняемого в конвейере, можно запускать до трех дополнительных контейнеров Docker. Эти контейнеры можно использовать для запуска таких сервисов, как хранилище данных или инструмент аналитики, а также любого стороннего сервиса, который может понадобиться вашему приложению для прохождения всех этапов конвейера. В нашем случае мы будем использовать отдельный сервисный контейнер для запуска MongoDB.
Перейдите в раздел исходного кода в репозитории для просмотра списка файлов.

Щелкните файл конфигурации bitbucket-pipelines.yml, чтобы получить к нему доступ. В правом верхнем углу вы найдете кнопку Edit (Редактировать), которая позволит вам отредактировать файл и сделать коммит прямо из браузера.
Внизу файла конфигурации необходимо добавить определение сервиса для нашей базы данных.
bitbucket-pipelines.yml
image: node:16
pipelines:
default:
- step:
script:
- npm install
- npm test
definitions:
services:
database:
image: mongoПри использовании MongoDB не нужны какие-либо дополнительные настройки в определении образа, но в случае с некоторыми образами Docker для хранилищ данных и сервисов может потребоваться указать отдельные переменные среды. Список примеров для баз данных можно найти в документации Bitbucket Pipelines.
Перед коммитом файла требуется добавить новый сервис в этап, на котором выполняются тесты. Окончательная конфигурация Pipelines должна выглядеть как показано ниже.
bitbucket-pipelines.yml
image: node:16
pipelines:
default:
- step:
script:
- npm install
- npm test
services:
- database
definitions:
services:
database:
image: mongoПерейдите в раздел Pipelines (Конвейеры) после коммита файла, чтобы наблюдать за выполнением конвейера. В нормальной ситуации он должен завершиться успешно.

Если щелкнуть по вкладке database (база данных) в панели журналов, можно увидеть журналы контейнера MongoDB.

Вот и все! Теперь вы знаете, как добавлять сервисы в конвейер для запуска интеграционных тестов. Не забудьте ознакомиться с документацией, чтобы узнать больше о способах использования этих сервисов.