Перевод статьи «How do we test third-party integrations using MockServer?».
Здравствуйте, читатели ?.
Давайте рассмотрим случай. Мы тестируем приложение для электронной коммерции, например Meesho, и у него есть интеграция с партнерами по доставке. Клиенты, заказывающие товар в Meesho, могут доставить его с помощью любого из перечисленных партнеров, таких как BlueDart, FedEx, DHL, DELIVERY и т.д. Как инженер по контролю качества я должен убедиться, что все интеграции работают так, как ожидается.
Каковы трудности, связанные с тестированием этого приложения?
- Невозможно протестировать систему, если API-система партнера по доставке отвечает кодом состояния 500. Приложение/система тесно связана с интеграциями сторонних производителей.
- Мы не можем дождаться полного тестирования перехода. Допустим, я оформил заказ в приложении, и он переходит моментально в такие статусы, как Picked up, in transit, delayed, delivered и unattempted delivery.
- Тестовые данные находятся в постоянно меняющемся состоянии, и иногда их невозможно предсказать. Как мы можем определить конкретные переходы между состояниями? Потому что статус связан с определенными сценариями использования и рабочими процессами. Например, если доставка невозможна, необходимо автоматически уведомить об этом клиента с помощью системы автоматических звонков. Как можно протестировать этот рабочий процесс?
- Как написать пакет автоматизации для этого?
Все вышеперечисленные проблемы мы решаем с помощью 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 готов к обслуживанию первого эндпоинта.

В ответ на 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”. Затем мы инициируем запрос на получение данных в бэкенде и управляем следующим обновлением в системе. Мы можем симулировать любой переход и протестировать ваш продукт на все изменения.
Теперь тестовые данные дешевы и быстро генерируются!
Удачного тестирования!