Wiremock - "URL does not match" 即使它是相同的

Wiremock - "URL does not match" even though it is same

我遇到了 Wiremock 说我的 URL 不匹配的问题,尽管它们是相同的。显然我错过了一些东西。我做错了什么?

WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/test/url?bookingCode=XYZ123&lastName=TEST"))
    .willReturn(WireMock.aResponse()
    .withStatus(200))
)

下面是控制台日志。

-----------------------------------------------------------------------------------------------------------------------
| Closest stub                                             | Request                                                  |
-----------------------------------------------------------------------------------------------------------------------
                                                           |
GET                                                        | GET
/test/url?bookingCode=XYZ123&lastName=TEST                 | /test/url?bookingCode=XYZ123&lastName=TEST            <<<<< URL does not match
                                                           |
                                                           |
-----------------------------------------------------------------------------------------------------------------------

是不是因为我没有将 Headers 包含在匹配器中?

如果是,我怎样才能避免匹配header?无论我发送什么 header,我都希望得到回复。

找到原因..WireMock.urlPathEqualTo("/test/url?bookingCode=XYZ123&lastName=TEST") 不应该有查询参数。

将其更改为 WireMock.urlPathEqualTo("/test/url") 解决了问题。

Documentation 表示允许。此外,日志 URL does not match 引起了混乱。考虑到匹配检查是分开的,wiremock 可以为查询参数添加一个单独的日志。

创建问题:https://github.com/tomakehurst/wiremock/issues/1262

您可以使用 withQueryParam 方法获取参数,同时保持 urlPathEqualTo 方法专用于 URL 路径。

WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/test/url"))
         .withQueryParam("bookingCode", WireMock.equalTo("XYZ123"))
         .withQueryParam("lastName", WireMock.equalTo("TEST"))
         .willReturn(WireMock.aResponse()
         .withStatus(200))

更多信息请参考http://wiremock.org/docs/request-matching/