使用 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
不会在提供的文件路径中填充文件,而是评估提供的 JsonPath
。 See documentation.
我不完全确定是否有办法将请求正文作为 .json 文件提供。如果将文件内容复制到withRequest(equalToJson(_yourJsonHere_))
中,是否有效?如果是这样,您可以将文件内容作为定义上方的 JSON 字符串获取,并将其提供给函数(或者我猜,从 return 创建一个 JSON 字符串的函数.json 文件).
此外,您可以创建一个自定义请求匹配器来为您进行解析。我想只有在上述方法不起作用时我才会推荐这个。
我目前正在尝试使用 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
不会在提供的文件路径中填充文件,而是评估提供的 JsonPath
。 See documentation.
我不完全确定是否有办法将请求正文作为 .json 文件提供。如果将文件内容复制到withRequest(equalToJson(_yourJsonHere_))
中,是否有效?如果是这样,您可以将文件内容作为定义上方的 JSON 字符串获取,并将其提供给函数(或者我猜,从 return 创建一个 JSON 字符串的函数.json 文件).
此外,您可以创建一个自定义请求匹配器来为您进行解析。我想只有在上述方法不起作用时我才会推荐这个。