gpt4 book ai didi

Wiremock:根据请求参数选择正文文件名

转载 作者:行者123 更新时间:2023-12-02 04:29:51 29 4
gpt4 key购买 nike

我正在使用 wiremock 来模拟 http 服务器,我正在返回来自 json 文件的响应(使用 withBodyFile 方法)。

现在我想根据请求参数选择并返回响应json文件。对于下面的示例,我想定义一个 stub ,以便根据请求参数选择主体文件。

myMockServer.stubFor(
get(urlEqualTo(myEndPoint+ "?key=key1"))
.willReturn(aResponse().withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("response_key1.json")

myMockServer.stubFor(
get(urlEqualTo(myEndPoint+ "?key=key2"))
.willReturn(aResponse().withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("response_key2.json")
myMockServer.stubFor(
get(urlEqualTo(myEndPoint+ "?key=key3"))
.willReturn(aResponse().withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("response_key3.json")

知道这怎么可能吗?我尝试定义转换器,但无法在重写方法中从 Response 对象获取流源路径,因此无法使用该方法。非常感谢..

最佳答案

目前无法在 wiremock 中对主体文件名进行参数化。我有类似的需求,我需要根据请求 URL 返回文件。所以我实现了一个转换器如下:

public class BodyFileNameResponseTransformer extends ResponseDefinitionTransformer {


public ResponseDefinition transform(Request request, ResponseDefinition rd,
FileSource fileSource, Parameters parameters) {

if (rd.getBodyFileName().startsWith("{{")) {
return new ResponseDefinitionBuilder().**withBodyFile**(request.getUrl().substring(1))
.withStatus(rd.getStatus())
.withHeaders(rd.getHeaders())
.withTransformers(
rd.getTransformers().toArray(new String[rd.getTransformers().size()]))
.build();
}

return rd;
}

public String getName() {
return "BodyFileNameTransformer";
}

您可以使用 request.queryParameter(key) 代替 request.getUrl() 并形成任何文件路径。根据您的需要创建文件路径,并在返回的 ResponseDefinition 上将其设置为 bodyFile。

不要忘记用 --extensions: Extension class names 开始 wiremock

更多详情请访问 Extending Wiremock

关于Wiremock:根据请求参数选择正文文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49956352/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com