<style>.lazy{display:none}</style>Как тестировать сторонние интеграции с помощью MockServer?

Как тестировать сторонние интеграции с помощью MockServer?

Перевод статьи «How do we test third-party integrations using MockServer?».

Здравствуйте, читатели 👋.

Давайте рассмотрим случай. Мы тестируем приложение для электронной коммерции, например Meesho, и у него есть интеграция с партнерами по доставке. Клиенты, заказывающие товар в Meesho, могут доставить его с помощью любого из перечисленных партнеров, таких как BlueDart, FedEx, DHL, DELIVERY и т.д. Как инженер по контролю качества я должен убедиться, что все интеграции работают так, как ожидается.

Каковы трудности, связанные с тестированием этого приложения?

  1. Невозможно протестировать систему, если API-система партнера по доставке отвечает кодом состояния 500. Приложение/система тесно связана с интеграциями сторонних производителей.
  2. Мы не можем дождаться полного тестирования перехода. Допустим, я оформил заказ в приложении, и он переходит моментально в такие статусы, как Picked up, in transit, delayed, delivered и unattempted delivery.
  3. Тестовые данные находятся в постоянно меняющемся состоянии, и иногда их невозможно предсказать. Как мы можем определить конкретные переходы между состояниями? Потому что статус связан с определенными сценариями использования и рабочими процессами. Например, если доставка невозможна, необходимо автоматически уведомить об этом клиента с помощью системы автоматических звонков. Как можно протестировать этот рабочий процесс?
  4. Как написать пакет автоматизации для этого?

Все вышеперечисленные проблемы мы решаем с помощью MockServer. Но прежде чем перейти к тому, как это сделать, необходимо понять, как работает MockServer!

MockServer в двух словах

MockServer построен на базе Java и использует для взаимодействия протокол HTTP/HTTPS. Подробнее о нем можно прочитать на их официальном сайте.

Установить и опробовать его можно на локальной машине с помощью Docker:

docker pull mockserver/mockserver
docker run -d --rm -p 1080:1080 mockserver/mockserver

После выполнения указанных команд попробуйте открыть http://localhost:1080/mockserver/dashboard в браузере. Вы попадете на экран управления мок-сервера. Если вы запускаете контейнер на другом порту, используйте тот же порт в URL (порт указывается после двоеточия, в данном случае у нас 1080 порт)!

Фантастика, все готово, спасибо Docker за простую установку.

Теперь мы собираемся установить ожидания на макетном сервере. Это не что иное, как конфигурирование MockServer с данными. Как мы можем этого добиться?

Выполнить HTTP-запрос типа PUT к серверу мокирования с ожиданиями (см. скриншот ниже), используя JSON-тело запроса. Ключ httpRequest в JSON содержит ключ method. Он указывает серверу мокирования на настройку его для GET-запроса HTTP с маршрутом /hello_world.

Ключ httpResponse в JSON укажет имитатору сервера, что на GET-запрос следует ответить /hello_world. Вот и все! Ваш MockServer готов к обслуживанию первого эндпоинта.

JSON-файл с указанными ключами, надпись "Status: 201 Created"

В ответ на GET /hello_world будут получены данные, заданные в ожидании MockServer.

MockServer обладает такими мощными опциями, как заголовки, Cookies, тайм-ауты, задержки и многое другое. 🌟

Не стесняйтесь исследовать и испытать его здесь: https://app.swaggerhub.com/apis/jamesdbloom/mock-server-openapi/5.15.x#/expectation/put_mockserver_expectation.

Как мы использовать MockServer в процессе тестирования

Мы настраиваем наши тестовые среды таким образом, чтобы все интеграции вызывали наши макеты серверов, а не реальные серверы.

Вместо того чтобы вызывать реальную точку GET <fedex_endpoint>/track/<tracking_id>, мы вызываем GET <mockServer>/track/<tracking_id>. Все запросы будут проходить через MockServer, и мы сможем манипулировать данными так, как нам необходимо для тестирования.

Для тестирования множества переходов состояний мы устанавливаем ожидание в MockServer, например, в статус “Picked Up”. Как только API-запрос разрешается для статуса “Picked Up”, мы обновляем ожидание в MockServer на статус “In Transit”. Затем мы инициируем запрос на получение данных в бэкенде и управляем следующим обновлением в системе. Мы можем симулировать любой переход и протестировать ваш продукт на все изменения.

Теперь тестовые данные дешевы и быстро генерируются!

Удачного тестирования!

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

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