Close

Учебное руководство по интеграционному тестированию с помощью 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.

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

Sten Pittet
Sten Pittet

Я уже 10 лет работаю в сфере ПО, занимал различные должности: от разработчика до менеджера продукта. Проработав 5 лет в Atlassian, где я участвовал в создании инструментов разработки, теперь я пишу статьи о разработке ПО. За пределами офиса я работаю над тем, чтобы стать хорошим отцом для своего потрясающего малыша.


Поделитесь этой статьей
Следующая тема

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Рисунок: DevOps

Сообщество DevOps

Рисунок: DevOps

Семинар по моделированию

Рисунок схемы

Начните работу бесплатно

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up