我想了解优先事项的运作方式。更具体地说,将存根优先级设置为存根的预期输出是多少。关于此问题的文档有限,可用的文档并没有真正解释输出的内容,因此我无法验证是否已正确实现。
这是我目前的代码:
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的存根中获得任何响应/
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
您到底想实现什么? 通常,您具有Wiremock配置,这些配置具有不同的请求参数或重叠。在您的情况下,它们是完全相同的。在哪种情况下应该显示第一种情况,在第二种情况下应该显示第二种情况?
Wiremock将始终仅返回恰好一个答案。通常,通过评估您在Wiremock配置中定义的请求参数来确定此答案。 请参阅以下有关Wiremock和优先级如何工作的描述:Wiremock Stubbing and priorities
如果参数重叠,Wiremock将选择您最近添加的配置(在您的情况下为第二个)。 或者,您可以通过设置优先级来指导Wiremock。优先级较低的优先级。
通常情况下,您会遇到一个更一般的情况(带有更少的请求参数-作为追赶者)和一个更具体的情况。第一个将获得较高的优先权(例如9),而第二个将具有较低的优先权(例如5)。 因此,如果请求参数匹配,则优先选择后者;在其他情况下,则选择第二个。
答案 1 :(得分:1)
默认情况下,WireMock 将使用最近添加的匹配存根来满足请求。
您可以使用 atPriority
在 Java 代码中添加优先级:
stubFor(get(urlMatching("/api/.*")).atPriority(5)
或在 JSON 中添加:
"priority": 1
阅读有关此here的更多信息
答案 2 :(得分:0)
如@monsIgnore所述,对于重叠的参数,将选择与这些参数匹配的最新添加的映射。
当我最初在Wiremock中查看匹配的请求时,我认为将选择最精确的匹配。
“最精确”是指与请求中的元素数量最多匹配的元素。例如,给定这两个映射(按此顺序添加):
"request" : {
"url" : "/oauth2/rest/consent",
"method" : "GET",
"headers" : {
"Cookie" : {
"equalTo" : "OAM_ID=VERSION_5"
}
}
}
"request" : {
"url" : "/oauth2/rest/consent",
"method" : "GET"
}
如果收到网址/oauth2/rest/consent
和OAM_ID cookie VERSION_5
的请求,则匹配最多元素的映射为映射1 。
但是选择了映射2 ,因为它匹配并且是最近添加的。
在这种情况下,通过向“映射”添加优先级,您可以确保带有cookie的请求与映射1 相匹配。
优先级是必需的,因为最精确的匹配并不总是很明显。例如,如果有第三个映射:
"request" : {
"url" : "/oauth2/rest/consent",
"method" : "GET",
"headers" : {
"Authorization" : {
"equalTo" : "Basic dXNlcjpwYXNzd29yZA=="
}
},
}
如果到达的请求具有来自映射1 的cookie和来自映射3 的授权标头,则无法确定该请求的最精确匹配。
它们每个都匹配3个元素。这是优先考虑的地方。