Почему WireMock говорит, что запрос не совпадает? Весенний облачный контракт

Wiremock регистрирует, что следующий запрос не соответствует:

    WireMock                                 : Request was not matched:
{
  "url" : "/api/accounts?username=defaultuser",
  "absoluteUrl" : "http://localhost:11651/api/accounts?username=defaultuser",
  "method" : "GET",
  "clientIp" : "127.0.0.1",
  "headers" : {
    "authorization" : "bearer test123",
    "accept" : "application/json, application/*+json",
    "user-agent" : "Java/1.8.0_121",
    "host" : "localhost:11651",
    "connection" : "keep-alive"
  },
  "cookies" : { },
  "browserProxyRequest" : false,
  "loggedDate" : 1500711718016,
  "bodyAsBase64" : "",
  "body" : "",
  "loggedDateString" : "2017-07-22T08:21:58Z"
}
Closest match:
{
  "urlPath" : "/api/accounts",
  "method" : "GET",
  "headers" : {
    "authorization" : {
      "matches" : "^bearer"
    },
    "accept" : {
      "equalTo" : "application/json, application/*+json"
    },
    "user-agent" : {
      "equalTo" : "Java/1.8.0_121"
    },
    "host" : {
      "matches" : "^localhost:[0-9]{5}"
    },
    "connection" : {
      "equalTo" : "keep-alive"
    }
  },
  "queryParameters" : {
    "username" : {
      "matches" : "^[a-zA-Z0-9]*$"
    }
  }
}

Проблема из-за разницы URL и urlPath? Я также пытался указать absoluteUrl в Contract. но это игнорируется. Я думаю, потому что это не определено в контракте DSL.

Запросная сторона контракта выглядит так:

request{
        method 'GET'
        url('/api/accounts'){
            queryParameters {
                parameter('username', $(consumer(regex('^[a-zA-Z0-9]*$')), producer('defaultuser')))
            }
        }
        headers {
            header('authorization', $(consumer(regex('^bearer')), producer(execute('authClientBearer()'))))
            header('accept', $(consumer('application/json, application/*+json')))
            header('user-agent', $(consumer('Java/1.8.0_121')))
            header('host', $(consumer(regex('^localhost:[0-9]{5}'))))
            header('connection', $(consumer('keep-alive')))
        }
    }

person Rocks360    schedule 22.07.2017    source источник
comment
Я думаю, что ваши совпадения для заголовка авторизации неверны. Вы должны закончить его с.*   -  person Marcin Grzejszczak    schedule 22.07.2017
comment
Я изменил это. Но до сих пор не соответствует.   -  person Rocks360    schedule 22.07.2017
comment
В отправленном запросе попробуйте добавить / в конце перед параметрами запроса. Если это не сработает, вы можете изменить контракт последовательно и отслеживать, что не соответствует. Другими словами, просто получите URL-адрес, затем добавьте параметры запроса, а затем заголовки.   -  person Marcin Grzejszczak    schedule 22.07.2017
comment
Я буду стараться. У меня также есть второй контракт с тем же URL-адресом, но с параметром запроса электронной почты. Возможно ли, что WireMock принимает решение только на основе URL-адреса? Итак, если у меня есть два контракта с одним и тем же URL-адресом, но с разными параметрами запроса, он не сможет выбрать правильный?   -  person Rocks360    schedule 22.07.2017
comment
Нет, я так не думаю. Он звонит в колокольчик об отсутствии / в конце URL-адреса   -  person Marcin Grzejszczak    schedule 22.07.2017
comment
Да было из-за отсутствующего / в конце URL! Спасибо.   -  person Rocks360    schedule 22.07.2017
comment
Хотите написать ответ? Так что я могу пометить этот вопрос как ответ. Или я должен сделать?   -  person Rocks360    schedule 22.07.2017
comment
я написал ответ   -  person Marcin Grzejszczak    schedule 22.07.2017


Ответы (2)


Оказалось, что отсутствует / в конце URL-адреса в договоре/заглушке

person Marcin Grzejszczak    schedule 22.07.2017

Не имеет прямого отношения к вопросу, но для всех, кто пришел сюда из Google:

В моем случае я был в неправильном состоянии сценария.

Подробнее о состояниях сценария здесь: http://wiremock.org/docs/stateful-behaviour/

person JoschJava    schedule 29.10.2019