Стресс-тестирование с внешним сервером API в Java Spring - ложный ответ? - PullRequest
0 голосов
/ 11 декабря 2018

У меня настроена микросервисная архитектура, и я хочу провести ее стресс-тестирование.У меня довольно сложная установка с некоторыми синхронными http-запросами и системой очереди сообщений (RabbitMQ).

Поскольку я использую сервер API другой компании, я не хочу рисковать, подчеркивая ихсервер.Этот запрос является синхронным вызовом, который запрашивает провайдера API и возвращает довольно значительный ответ.Вместо этого я хочу иметь заглушку / макет, который будет возвращать аналогичный ответ и с аналогичной задержкой.Скажем, например, ответ от этого сервера равен 5 с и возвращает 2 КБ данных, затем я хочу ввести задержку в 5 с и вернуть более или менее некоторые данные сравнительного размера (другими словами, мне нужна некоторая настройка) в том формате, который у меня есть.подготовлено.

Чтобы добраться до этого момента, я требую (а) захватить значительный ответ и отредактировать его.В частности, я хочу отредактировать его, чтобы отфильтровать некоторые конфиденциальные данные, а также увеличить его размер и увеличить его, чтобы я мог подчеркнуть аспект пропускной способности системы.(б) Мне необходимо оставаться как можно ближе к нативному решению, чтобы получить хорошее представление о времени отклика с этой стороны, а также я хочу, чтобы при стресс-тестировании было как можно меньше накладных расходов.Я искал некоторые решения, такие как WireMock, которые, если я правильно понял, настроили поддельный сервер для тестирования.Это не сработает для меня, так как мне требуется использовать собственные серверы (основанные на TomCat), чтобы оставаться как можно ближе к моей архитектуре.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Да, Wiremock звучит как хорошее предложение.Для моей команды wiremock работал отлично.

Я бы предложил следующий подход: установить Docker Spin up Wiremock в док-контейнер с помощью docker-compose up.Пример docker-compose.yaml:

version: "3"
services:
 wiremock:
  image: rodolpheche/wiremock:latest
  ports:
    - "8181:8080"
  volumes:
    - ./__files/:/./home/wiremock/__files/
    - ./mappings/:/./home/wiremock/mappings/
  command:
    - -verbose
    - -global-response-templating

docker-compose (в каталоге, в котором вы сохранили yaml и принимаете запросы на доступ к файловой системе), тогда вы должны быть готовы к работе.

Ваш URL для API должен указывать на http://localhost:8181

После этого выполните запись с реальными данными (http://localhost:8181/__admin/recorder)

и введите http для внешнего API во время записи.

Разделите тело на отдельный файл и поместите его в папку __files. Укажите файл с "" bodyFileName "в файле запроса (сопоставления)

После отделения файла данных Wiremock (__files) отВ файле запроса (сопоставления) вы можете использовать логику шаблонов, чтобы включить в ответ такие вещи, как вычисление даты (сейчас + 1 день) и другие замечательные вещи, делающие тестовые данные долговечными и пригодными для повторного использования.

У меня есть некоторые предложения здесь. mobileera_wiremock_kb

Кроме того, после того, как вы сделали несколько внешних сценариев API, вы можете настроить совместное использование wiremock для доступа других разработчиков.

0 голосов
/ 12 декабря 2018

Вы можете запустить WireMock внутри контейнера сервлета (включая Tomcat).Вы теряете доступ к некоторым свойствам конфигурации, но это может не иметь значения в описанном вами случае.

Подробнее см. Здесь: http://wiremock.org/docs/getting-started/#Deploying-into-a-servlet-container

В качестве альтернативы вы можете использовать MockLab , который является полностью размещенным сервисом на основе WireMock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...