Статьи
Обучающие материалы
Интерактивные руководства
Учебное руководство по интеграционному тестированию с помощью Bitbucket Pipelines
Стен Питтет
Приглашенный автор
Узнайте, как с помощью Bitbucket Pipelines запускать интеграционные тесты для конвейера со множеством сервисов, работающих в отдельных контейнерах Docker.
Тестирование является важнейшей частью непрерывной интеграции и непрерывной поставки. А если вы практикуете непрерывное развертывание, тестирование будет последней линией защиты от багов перед выпуском изменений клиентам. Модульные тесты, проверяющие отдельные методы и классы, являются отличным средством для первичного предотвращения проблем, но в дополнение к ним необходимо выполнять интеграционные тесты, которые обеспечивают правильное взаимодействие различных модулей приложения (сервера приложений, базы данных, кэша). В этом учебном руководстве будет показано, как с помощью Bitbucket Pipelines запускать интеграционные тесты для конвейера со множеством сервисов, работающих в отдельных контейнерах Docker.
Время
30 минут
Аудитория
Те, кто только начинает работу с непрерывной интеграцией и/или Bitbucket Pipelines
Обязательные условия
- Аккаунт Bitbucket
-
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.
Вот и все! Теперь вы знаете, как добавлять сервисы в конвейер для запуска интеграционных тестов. Не забудьте ознакомиться с документацией, чтобы узнать больше о способах использования этих сервисов.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.