使用 wiremock 模拟带有负载的请求

mocking a request with a payload using wiremock

我目前正在尝试使用 Wiremock 模拟外部服务器。 我的外部服务器端点之一接受有效负载。 此端点定义如下:

  def sendRequestToMockServer(payload: String) = {
    for {
      request_entity <- Marshal(payload).to[RequestEntity]
      response <- Http().singleRequest(
          HttpRequest(
            method = HttpMethods.GET,
            uri = "http://localhost:9090/login",
            entity = request_entity
          )
        )
    } yield {
      response
    }
  }

为了使用 Wiremock 模拟这个端点,我编写了以下代码:

    stubFor(
      get(urlEqualTo("/login"))
        .willReturn(
          aResponse()
            .withHeader("Content-Type","application/json")
            .withBodyFile("wireMockResponse.json")
            .withStatus(200)
        )
        .withRequestBody(matchingJsonPath("requestBody.json"))
    )

我在 requestBody.json 文件中定义了请求正文。

但是当我 运行 测试时,我不断收到错误消息,提示未找到所请求的 Url。

我认为错误与这一行有关 withRequestBody(matchingJsonPath("requestBody.json")),因为当我评论它时错误消失了。

关于如何解决这个问题有什么建议吗?

matchingJsonPath 不会在提供的文件路径中填充文件,而是评估提供的 JsonPathSee documentation.

我不完全确定是否有办法将请求正文作为 .json 文件提供。如果将文件内容复制到withRequest(equalToJson(_yourJsonHere_))中,是否有效?如果是这样,您可以将文件内容作为定义上方的 JSON 字符串获取,并将其提供给函数(或者我猜,从 return 创建一个 JSON 字符串的函数.json 文件).

此外,您可以创建一个自定义请求匹配器来为您进行解析。我想只有在上述方法不起作用时我才会推荐这个。