我面临一个问题,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
|
|
-----------------------------------------------------------------------------------------------------------------------
是因为我没有在匹配器中包含标题吗?
如果是,如何避免匹配标题?无论我发送什么标头,我都希望得到响应。
找到原因了..
WireMock.urlPathEqualTo("/test/url?bookingCode=XYZ123&lastName=TEST")
不应该有查询参数。
将其更改为
WireMock.urlPathEqualTo("/test/url")
解决了问题。
文档说这是允许的。此外,日志
URL does not match
造成了混乱。考虑到匹配检查是单独的,wiremock 可以为查询参数添加单独的日志。
您可以使用
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))
您应该转义正则表达式特殊字符“?”
WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/test/url\\?bookingCode=XYZ123&lastName=TEST"))
.willReturn(WireMock.aResponse()
.withStatus(200))
)