我想了解优先级是如何工作的。更具体地说,将优先级设置为存根的预期输出是什么。关于这方面的文档有限,可用的文档并没有真正解释输出是什么样子的,所以我无法验证我是否正确地实现了它。
这是我目前的代码:
stubFor(post(urlMatching("/user/test\\?(and)\\=(que).*")).atPriority(1)
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "text/plain")
.withBody("This stub is testing for Title ")
)
);
System.out.println("About to execute the second stub");
stubFor(post(urlMatching("/user/test\\?(and)\\=(que).*")).atPriority(2)
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "text/plain")
.withBody("This stub is testing Author ID ")
)
);
System.out.println("Second stub executed");
我正在从SOAPUI发送以下请求:
/user/test?and=query
因此,应该执行两个存根,我应该收到两个响应,对吗?
我目前只收到一个响应,来自优先级为1的存根。我没有从优先级为2的存根收到任何响应/
谁能帮帮我吗?
3条答案
按热度按时间czq61nw11#
您到底想要达到什么目的?您通常有Wirerock配置,它们具有不同的请求参数或重叠。在您的情况下,它们完全相同。在哪种情况下应该显示第一个,在哪种情况下应该显示第二个?
Wiremock始终只返回一个答案。此答案通常由您在Wiremock配置中定义的请求参数的评估确定。有关Wiremock和优先级如何工作的信息,请参阅以下说明:Wiremock Stubbing and priorities
如果有重叠的参数,Wiremock将选择您最近添加的配置(在您的情况下是第二个)。或者您可以通过设置优先级来指导Wiremock。优先级较低的将被优先使用。
通常情况下,你有一个更一般的情况(较少的请求参数-作为追赶)和一个更具体的情况。第一个将获得更高的优先级(如9)和后者一个较低的(e.q. 5)。因此,后者将被优先选择,如果请求参数匹配,在其他情况下,第二个。
yqyhoc1h2#
如@monsIgnore所述,对于重叠参数,将选择与这些参数匹配的最近添加的Map。
当我最初在Wiremock中查看请求匹配时,我认为会选择最精确的匹配。
“最精确”是指与请求中最多元素匹配的Map。例如,给定以下两个Map(按此顺序添加):
Map1
Map2
如果接收到对url
/oauth2/rest/consent
和VERSION_5
的OAM_ID cookie的请求,则与最多元素匹配的Map为Map1。但是,选择了Map2,因为它匹配并且是最近添加的。
在这种情况下,通过向Map添加优先级,可以确保具有Cookie的请求与Map1匹配。
优先级是必要的,因为最精确的匹配并不总是显而易见的。例如,如果有第三个Map:
Map3
如果收到的请求具有来自Mapping 1的Cookie和来自Mapping 3的Authorization标头,则无法确定该请求的最精确匹配项。
它们都匹配3个元素。这就是优先级的作用所在。
aiazj4mn3#
WireMock支持设置存根优先级。
默认情况下,WireMock将使用最近添加的匹配存根来满足请求。
可以使用
atPriority
在Java代码中添加优先级:或在JSON中添加:
点击此处阅读更多信息