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




В 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
Может, вы забыли добавить --local-response-templating в макет ...
Это кажется идеальным вариантом использования Трансформатор корпуса 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.
К сожалению, включенная мной строка, начинающаяся с C02, является частью командной строки. Я думаю, что я вижу содержимое json-файла без фактического случайного целого числа.
@Jeff Можете ли вы написать код того, как вы запускаете свой сервер Wiremock?
Как указано в моем ответе, который я добавил после этого вопроса, я смог заставить все работать, используя переключатель --global-response-templating. А. Кустра модифицировал свой ответ следующим образом. Могу вам сказать, что без этого переключателя я пробовал много разных вещей, конечно, безуспешно. Возможно, я пропустил это в документации, но если на самом деле этого нет или не подчеркивается, это должно быть заметно при обсуждении того, как делать динамические ответы в документации. Я понимаю, что вы предоставили командную строку, но динамические ответы могут выполняться без открываемого материала.
Чтобы приведенные выше примеры работали, мне пришлось запустить автономную банку с --global-response-templating. Затем я увидел, например, что {{now}} работает, чего я и хотел. Не уверен, что это указано в документации - я попробовал всегда полезную --help.
Я попробовал это, и мне не вернули идентификатор. Ответ на curl локальный: 8080 / динамический_ид -d foo = bar: {{randomValue type = 'UUID'}} - случайная строка не генерируется. Я использую последнюю автономную банку WireMock.