如何使用"优先事项"在线索

时间:2018-04-28 16:59:04

标签: java wiremock

我想了解优先事项的运作方式。更具体地说,将存根优先级设置为存根的预期输出是多少。关于此问题的文档有限,可用的文档并没有真正解释输出的内容,因此我无法验证是否已正确实现。

这是我目前的代码:

    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 个答案:

答案 0 :(得分:1)

您到底想实现什么? 通常,您具有Wiremock配置,这些配置具有不同的请求参数或重叠。在您的情况下,它们是完全相同的。在哪种情况下应该显示第一种情况,在第二种情况下应该显示第二种情况?

Wiremock将始终仅返回恰好一个答案。通常,通过评估您在Wiremock配置中定义的请求参数来确定此答案。 请参阅以下有关Wiremock和优先级如何工作的描述:Wiremock Stubbing and priorities

如果参数重叠,Wiremock将选择您最近添加的配置(在您的情况下为第二个)。 或者,您可以通过设置优先级来指导Wiremock。优先级较低的优先级。

通常情况下,您会遇到一个更一般的情况(带有更少的请求参数-作为追赶者)和一个更具体的情况。第一个将获得较高的优先权(例如9),而第二个将具有较低的优先权(例如5)。 因此,如果请求参数匹配,则优先选择后者;在其他情况下,则选择第二个。

答案 1 :(得分:1)

WireMock 支持设置存根优先级。

默认情况下,WireMock 将使用最近添加的匹配存根来满足请求。

您可以使用 atPriority 在 Java 代码中添加优先级:

stubFor(get(urlMatching("/api/.*")).atPriority(5)

或在 JSON 中添加:

"priority": 1

阅读有关此here的更多信息

答案 2 :(得分:0)

如@monsIgnore所述,对于重叠的参数,将选择与这些参数匹配的最新添加的映射。

当我最初在Wiremock中查看匹配的请求时,我认为将选择最精确的匹配。

“最精确”是指与请求中的元素数量最多匹配的元素。例如,给定这两个映射(按此顺序添加):

映射1

  "request" : {
    "url" : "/oauth2/rest/consent",
    "method" : "GET",
    "headers" : {
      "Cookie" : {
        "equalTo" : "OAM_ID=VERSION_5"
      }
    }
  } 

映射2

 "request" : {
    "url" : "/oauth2/rest/consent",
    "method" : "GET"
  }

如果收到网址/oauth2/rest/consent和OAM_ID cookie VERSION_5的请求,则匹配最多元素的映射为映射1

但是选择了映射2 ,因为它匹配并且是最近添加的。

在这种情况下,通过向“映射”添加优先级,您可以确保带有cookie的请求与映射1 相匹配。

优先级是必需的,因为最精确的匹配并不总是很明显。例如,如果有第三个映射:

映射3

  "request" : {
    "url" : "/oauth2/rest/consent",
    "method" : "GET",
    "headers" : {
      "Authorization" : {
        "equalTo" : "Basic dXNlcjpwYXNzd29yZA=="
      }
    },
  } 

如果到达的请求具有来自映射1 的cookie和来自映射3 的授权标头,则无法确定该请求的最精确匹配。

它们每个都匹配3个元素。这是优先考虑的地方。