Wiremock - “URL 不匹配”,即使它是相同的

问题描述 投票:0回答:3

我面临一个问题,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
                                                           |
                                                           |
-----------------------------------------------------------------------------------------------------------------------

是因为我没有在匹配器中包含标题吗?

如果是,如何避免匹配标题?无论我发送什么标头,我都希望得到响应。

java wiremock
3个回答
29
投票

找到原因了..

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

将其更改为

WireMock.urlPathEqualTo("/test/url")
解决了问题。

文档说这是允许的。此外,日志

URL does not match
造成了混乱。考虑到匹配检查是单独的,wiremock 可以为查询参数添加单独的日志。

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


17
投票

您可以使用

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/


0
投票

您应该转义正则表达式特殊字符“?”

WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/test/url\\?bookingCode=XYZ123&lastName=TEST"))
    .willReturn(WireMock.aResponse()
    .withStatus(200))
)
© www.soinside.com 2019 - 2024. All rights reserved.