Шаблон запроса Wiremock, соответствующий параметрам запроса - PullRequest
0 голосов
/ 29 мая 2019

Я использую spock и wiremock для функционального тестирования в приложении Spring Boot 2.1.5. Входящий URL-адрес:

/mockedserver/v1/Items('1010873195')/Products?$format=json

Да, это довольно странный URL, но я ничего не могу с этим поделать.

Я установил сопоставление пути в JSON с помощью:

{
  "request": {
    "method": "GET",
    "url": "/mockedserver/v1/Items('1010873195')/Products.*",
    "queryParams" : {
      "$format": "json"
    },
    "headers": {
      "x-csrf-token": "",
      "Accept": "application/json",
      "Content-Type": "application/json"
    }
  },
  "response": {
    "headers": {
      "Content-Type": "application/json"
    },
    "status": 200,
    "bodyFileName": "/../responses/mockedserver/get-products/1010873195-success-200.json"
  }
}

Как вы могли видеть, я смоделировал странно выглядящий параметр запроса в блоке "queryParams". Это не сработало, поэтому я поместил регулярное выражение .* в конце URL-адреса.

Оба дали мне результат:

                                               Request was not matched
                                               =======================

-----------------------------------------------------------------------------------------------------------------------
| Closest stub                                             | Request                                                  |
-----------------------------------------------------------------------------------------------------------------------
                                                           |
GET                                                        | GET
/mockedserver/v1/Items('1010873195')/Produ                 | /mockedserver/v1/Items('1010873195')/Produ<<<<< URL does not match
cts                                                        | cts?$format=json
                                                           |
                                                           |
-----------------------------------------------------------------------------------------------------------------------

Как видите, он совпадает, за исключением части параметра в конце, в основном, мне нет дела до параметра, поэтому я надеялся просто подстановить его.

Одна из возможностей состоит в том, что знак $ создает беспорядок, должен ли я вместо этого избегать его? если да, то как?

Другое дело, что это знак вопроса ?. Я пытался избежать этого с \? и \\?, оба из которых были неудачными.

Относительно той части блока запроса, которая здесь выглядит важной:

    "method": "GET",
    "url": "/mockedserver/v1/Items('1010873195')/Products.*",
    "queryParams" : {
      "$format": "json"
    },

Я видел , где-то было сказано , что если вы используете urlPath вместо url, то WireMock обрабатывает дополнительные заголовки или параметры запроса без параметров соответствия как "все равно, совпадение в любом случае". Но, похоже, это не так, как показывает вывод ошибок.

ДАЛЬНЕЙШАЯ ОБСУЖДЕНИЕ С тех пор я пробовал различные комбинации, вместо url ставя urlPath, urlPattern и даже urlPathPattern. Все это приводит к:

                                               Request was not matched
                                               =======================

-----------------------------------------------------------------------------------------------------------------------
| Closest stub                                             | Request                                                  |
-----------------------------------------------------------------------------------------------------------------------
                                                           |
GET                                                        | GET
                                                           | /mockedserver/v1/Items('1010873195')/Produ<<<<< URL does not match. URLs must start with a /
                                                           | cts?$format=json
                                                           |
                                                           |
-----------------------------------------------------------------------------------------------------------------------

Я также пробовал это делать с блоком queryParams и без него, на случай, если это повлияло на совпадение, но, похоже, это не имеет никакого эффекта. Я начинаю задаваться вопросом, есть ли какой-нибудь другой флаг, который мне нужно установить в вызове stubFor?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Исправлено: в основном вам нужны urlPath, без queryParams и шаблон регулярного выражения на основе строк, который я решил:

/^\\/mockedserver\\/v1\\/Items\('[0-9]{10}'\)\\/Products/

По сути, все сводилось к правильному сочетанию вещей.

0 голосов
/ 30 мая 2019

Я считаю, что вам нужно попробовать "urlPathPattern" или "urlPath" вместо "url" в вашем отображении следующим образом:

"urlPathPattern": "/mockedserver/v1/Items('1010873195')/Products.*"
...