Соответствие запроса Wiremock - Невозможно сопоставить URL с динамической переменной пути при использовании с WireMockRestServiceServer - PullRequest
0 голосов
/ 21 сентября 2018

Сопоставление заглушки

{
    "request": {
        "method": "GET",
        "urlPathPattern": "/validation/session/([a-zA-Z0-9/-]*)"
    },
    "response": {
        "status": 200,
        "jsonBody": {
            "isIpBlocked": "Y",
            "serviceMessage": {
                "type": "OK",
                "code": "200",
                "description": "IP validated successfully. No result found"
            }
        },
        "headers": {
            "Content-Type": "application/json"
        }
    }
}

не может соответствовать URL

https://mywebsite/validation/session/687d69ae-42a8-4584-a395-8e0c876bacae (как абсолютный, так и относительный путьне работает)

Также попытался заменить urlPathPattern на urlPattern, но безуспешно

Пробовал все нижеприведенные комбинации.Ничего не работает

/validation/session/([a-zA-Z0-9\\-]+)
/validation/session/([a-zA-Z0-9\\-]*)
/validation/session/([a-zA-Z0-9/-]+)
/validation/session/([a-zA-Z0-9/-]*)

Примечание: Wiremock версии 2.18.0, Spring Boot 2.0

На самом деле, кроме URL (в сопоставлении заглушки с абсолютным URL), ничего не работает дляменя.

Это прекрасно работает, если я использую только Wiremock.Это не работает, если я использую Wiremock в тандеме с WireMockRestServiceServer (spring-cloud-contract).

Рабочий код - только с Wiremock

@Rule
  public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8080).httpsPort(443));

stubFor(get(urlMatching("/validation/session/([a-zA-Z0-9/-]*)"))        .willReturn(aResponse().withStatus(HttpStatus.OK.value()).withHeader("Content-Type", "application/json")
              .withBody("{\"isIpBlocked\": \"Y\"}")));

Не работает - код с WireMockRestServiceServer

MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate)
      .stubs("classpath:/stubs/**/validate-ip-success-mock-response.json").build();

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

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

MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate)
          .stubs("classpath:/stubs/valic-get-user-details-mock-response.json").build();  //no dynamic url

  Resource validateIpResponse = new ClassPathResource("/stubs/validate-ip-success-mock-response.json");
  Pattern pattern = Pattern.compile("https://helloworld.com/validation/session/([a-zA-Z0-9/-]*)");
  Matcher<String> matcher = MatchesPattern.matchesPattern(pattern);
  server.expect(MockRestRequestMatchers.requestTo(matcher))
      .andRespond(MockRestResponseCreators.withSuccess(validateIpResponse, MediaType.APPLICATION_JSON));

Я поднял эту проблему на странице GitHub контракта весеннего облака.https://github.com/spring-cloud/spring-cloud-contract/issues/740

0 голосов
/ 26 сентября 2018

Как обсуждено в списке рассылки WireMock thread , пример должен быть изменен на относительный URL-адрес, как описано в Руководстве по сопоставлению запросов WireMock :

"urlPathPattern": "/validation/session/([a-zA-Z0-9/-]*)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...