Wiremock Standalone с динамическим откликом

У меня есть автономный экземпляр сервера Wiremock. Сопоставления хранятся в виде файлов json в папке сопоставлений. У меня есть запрос POST, который должен возвращать динамический идентификатор (целое число) в ответе. Есть ли способ настроить это в файле json?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
5
0
11 499
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Файл сопоставления: dynamic_id.json

{
  "request": {
    "method": "POST",
    "url": "/dynamic_id"
  },
  "response": {
    "headers": {
      "Content-Type": "application/json"
    },
    "status": 200,
    "body": "{{randomValue type='UUID'}}",
    "transformers": ["response-template"]

  }
}

Использование пустого POST http: // wiremock / динамический_ид вернет идентификатор, подобный: c2e6bf32-c9a3-45c0-b988-94fad04cc7a2.

Запустите WireMock:

java -jar wiremock-standalone-2.18.0.jar --port 8181 --verbose --local-response-templating

Я попробовал это, и мне не вернули идентификатор. Ответ на curl локальный: 8080 / динамический_ид -d foo = bar: {{randomValue type = 'UUID'}} - случайная строка не генерируется. Я использую последнюю автономную банку WireMock.

Jeff 03.12.2018 07:32

Может, вы забыли добавить --local-response-templating в макет ...

MaxDhn 29.01.2021 01:21
Ответ принят как подходящий

Это кажется идеальным вариантом использования Трансформатор корпуса OpenTable Wiremock.

Его можно легко интегрировать с автономным сервером следующим образом:

java -cp "wiremock-body-transformer-1.1.6.jar:wiremock-2.3.1-standalone.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --verbose --extensions com.opentable.extension.BodyTransformer

И позволяет вам легко указать динамическую переменную, которую вы хотите сопоставить в ответе.

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

{
    "request": {
        "method": "POST",
        "urlPath": "/transform",
    },
    "response": {
        "status": 200,
        "body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
        "headers": {
            "Content-Type": "application/json"
        },
        "transformers": ["body-transformer"]
    }
}

Я пробовал это: 1. Создал каталог преобразования в сопоставлениях 2. Создал файл stub2.json с текстом, указанным выше. 3. WireMock терпел неудачу, пока я не удалил запятую после преобразования 4. перезапустил WireMock и попытался скрутить 5. Результат был: {"randomInteger": "$ (! RandomInteger)"} C02W31GSHTD8: transform - не уверен, является ли строка случайным целым числом но это не меняет. 6. Я действительно хочу, чтобы это работало не для случайных чисел типа int, а для даты. Пожалуйста, дайте мне знать, что мне не хватает и как проверить этот динамический ответ с помощью curl.

Jeff 03.12.2018 00:57

К сожалению, включенная мной строка, начинающаяся с C02, является частью командной строки. Я думаю, что я вижу содержимое json-файла без фактического случайного целого числа.

Jeff 03.12.2018 07:28

@Jeff Можете ли вы написать код того, как вы запускаете свой сервер Wiremock?

Mark Han 03.12.2018 17:57

Как указано в моем ответе, который я добавил после этого вопроса, я смог заставить все работать, используя переключатель --global-response-templating. А. Кустра модифицировал свой ответ следующим образом. Могу вам сказать, что без этого переключателя я пробовал много разных вещей, конечно, безуспешно. Возможно, я пропустил это в документации, но если на самом деле этого нет или не подчеркивается, это должно быть заметно при обсуждении того, как делать динамические ответы в документации. Я понимаю, что вы предоставили командную строку, но динамические ответы могут выполняться без открываемого материала.

Jeff 03.12.2018 19:50

Чтобы приведенные выше примеры работали, мне пришлось запустить автономную банку с --global-response-templating. Затем я увидел, например, что {{now}} работает, чего я и хотел. Не уверен, что это указано в документации - я попробовал всегда полезную --help.

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