Ответ Wiremock в зависимости от параметра тела запроса - PullRequest
0 голосов
/ 05 марта 2019

Я отправляю Wiremock (Standalone, 2.21) запрос с телом

{
        "attribute1": "value1",
        "attribute2": "value2",
        ...
        "attributen": "valuen"
}

на URL /test/test-url, без параметров запроса, с POST.Я хотел бы сделать следующее:

  • ответить «response1.json», когда атрибут1 равен «text1»
  • ответить «response2.json», когда атрибут1 равен «text2»
  • отвечает «response_general.json», когда attribute1 равен чему-то другому, чем «text1» или «text2»

Другие атрибуты не имеют значения в отношении ответа.Я хотел бы сделать это, используя только файлы .json.Спасибо!

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

Ответ состоял в том, чтобы проверить шаблоны тела и 3 сопоставления для 3 различных случаев:

Один для случая, когда обнаружен текст1:

       "request": {
          "method": "POST",
          "urlPattern":"/.*",
          "bodyPatterns": [
            {
              "contains":"\"attribute1\": \"text1\""
            }
          ]
        },
        "response": {
          "status": 200,
          "bodyFileName": "response_text1.json",
          "headers": {
            "Content-Type": "application/json"
          }
        }

Один для случаяпри обнаружении text2:

      "request": {
          "method": "POST",
          "urlPattern":"/.*",
          "bodyPatterns": [
            {
              "contains":"\"attribute1\": \"text2\""
            }
          ]
        },
        "response": {
          "status": 200,
          "bodyFileName": "response_text2.json",
          "headers": {
            "Content-Type": "application/json"
          }
        }

Один для случая, когда ни один не обнаружен.В этом случае общий ответ возвращается.

        "request": {
            "method": "POST",
            "urlPattern": "/.*"
        },
        "response": {
              "status": 200,
              "bodyFileName": "response_general.json",
              "headers": {
                "Content-Type": "application/json"
              }
            }
0 голосов
/ 25 марта 2019

Вместо использования «contains» или «equalTo» я бы предложил использовать «matchJsonPath»

"bodyPatterns": [
        {
            "matchesJsonPath": "$[?(@.attribute1 == 'value1')]"
        }
]
0 голосов
/ 11 марта 2019

В более свежих версиях WireMock (2.19+) есть поддержка обработки HandleBars в атрибуте BodyFileName .Затем это позволяет вам ввести (частичное) имя в тело запроса JSON, а затем повторно использовать его значение для ссылки на имя файла.

{
  "request" : {
    "urlPathPattern" : "/jpathFile",
    "method" : "GET",
    "headers": {
        "Content-Type": {
            "equalTo": "application/json"
        }
    }

  },
  "response" : {
    "status" : 200,
    "headers": {
        "Content-Type": "application/json"
    },
    "bodyFileName" : "/{{jsonPath request.body '$.attribute2'}}",
    "transformers": ["response-template"]
  }
}

Входное сообщение:

{
    "attribute1": "value1",
    "attribute2": "response.json",
    "attributen": "valuen"
}

the response.json в /__files/response.json месте:

{
    "hello": "World!"
}
...