Стресс-тестирование с внешним сервером API в Java Spring - фиктивный ответ?

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
799
2

Ответы 2

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

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

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

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

Я бы предложил следующий подход: Установить Docker Разверните 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 up (в каталоге, в котором вы сохранили yaml, и принимаете запросы на доступ к файловой системе) тогда вы должны быть готовы к работе.

Ваш URL-адрес для Api должен указывать на http: // локальный: 8181

После этого сделайте запись с реальными данными (http: // локальный: 8181 / __ админ / рекордер)

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

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

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

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

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

Другие вопросы по теме