Сопоставление пути URL-адреса с шаблоном в WireMocks (сопоставление с образцом)

Я использую Wiremock для тестирования REST API, и я столкнулся с указанной ниже проблемой. У меня созданы следующие 2 json-запроса.

ЗАПРОС 1:

{
  "request": {
    "method": "GET",
    "urlPattern": "/api/v1/user/2158634832/ishop.*",
    "headers": {
      "Accept": {
        "contains": "application/json"
      },
      "X-RequestId": {
        "matches": ".*"
      },
      "X-SecurityToken": {
        "matches": "valid_secure_token"
      }
    }
  },
  "response": {
    "status": 200,
    "jsonBody": {
      "user": {
        "ID": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
        "info": [
          {
            "kid": "2f0ad36a-9f23-427c-9a15-16d240385b87",
            "cid": 10962435,
            "pid": "V",
            "contactid": 11812026,
            "created": "2017-04-26T00:08:25.926",
            "lastModified": "2017-04-27T00:01:45.047",
          }
        ]
      }
    },
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

Мой запрос на получение вышеуказанного макета выглядит примерно так

**/api/v1/user/2158634832/ishop?ID=9879cfde-e353-4722-a91e-f22d29d8195c**

Запрос 2:

{
  "request": {
    "method": "GET",
    "urlPattern": "/api/v1/user/2158634832/ishop/status.*",
    "headers": {
      "Accept": {
        "contains": "application/json"
      },
      "X-RequestId": {
        "matches": ".*"
      },
      "X-SecurityToken": {
        "matches": "valid_secure_token"
      }
    }
  },
  "response": {
    "status": 200,
    "jsonBody": {
      "userstatus": {
        "id": "5cc1b131-8858-4870-a7ce-fd37aa805ebf",
        "type": "ishop",
        "status" : "active",
        "lastModifiedTime": "2017-04-27T00:01:45.047",
        "allowedChange": "true"
      }
    },
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

мой запрос Get для вышеуказанного выглядит примерно так

/api/v1/user/2158634832/ishop/status?ID=9879cfde-e353-4722-a91e-f22d29d8195c

проблема здесь в том, что иногда из-за схожего шаблона URL для запроса 1 и запроса 2 то, что происходит, иногда

Когда я отправляю запрос на запрос 1, я получаю ответ, который соответствует запросу 2.

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

какие-либо предложения ?


person user641887    schedule 09.07.2017    source источник


Ответы (3)


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

Я предлагаю быть более конкретным с вашими URL-адресами, например

"urlPath": "/api/v1/user/2158634832/ishop" в первом заглушке и

"urlPath": "/api/v1/user/2158634832/ishop/status" во втором

Они по-прежнему будут совпадать, несмотря на то, что вы не укажете параметр запроса идентификатора. WireMock обрабатывает лишние заголовки или параметры запроса без параметров соответствия как «все равно, все равно совпадать».

person Tom    schedule 10.07.2017
comment
Оба запроса на самом деле не идентичны. Один имеет / я делаю покупки в конце, а другой - магазин / статус - person user641887; 10.07.2017
comment
Извините, я неправильно прочитал ваши сопоставления заглушек. Вот что происходит, когда я пытаюсь ответить со своего телефона. Отредактирую свой пост. - person Tom; 11.07.2017
comment
привет Том, извини, я не видел это сообщение раньше, я понял, что это проблема с регулярным выражением. хотя я не видел вашего ответа, но это то же самое, о чем я думал. Спасибо еще раз за помощь. - person user641887; 12.07.2017

Лучшее решение - использовать приоритет заглушки:

http://wiremock.org/docs/stubbing/#stub-priority

Таким образом, вы все еще можете использовать urlPatten

{
    "priority" : 2,
    "request": {
        "method": "GET",
        "urlPattern": "/api/v1/user/2158634832/ishop.*",
        "headers": {
        ...

а также:

{
    "priority" : 1,
    "request": {
        "method": "GET",
        "urlPattern": "/api/v1/user/2158634832/ishop/status.*",
        "headers": {
        ...
person Doctor Parameter    schedule 23.08.2018

Ну я исправил это следующим образом

Запрос 1 изменен с

"urlPattern": "/api/v1/user/2158634832/ishop.*",

to

"urlPath": "/api/v1/user/2158634832/ishop",

Запрос 2 изменен с

"urlPattern": "/api/v1/user/2158634832/ishop/status.*",

to

"urlPath": "/api/v1/user/2158634832/ishop/status",
person user641887    schedule 12.07.2017