我正在使用wiremock来模拟http服务器,我正在从json文件返回响应(使用withBodyFile
方法)。
现在我想根据请求参数选择并返回响应json文件。对于下面的示例,我想定义一个存根,以便根据请求参数选择正文文件。
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对象获取Stream Source Path,因此无法使用该appraoch。非常感谢..
答案 0 :(得分:0)
截至目前,无法在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:扩展类名称
启动Wiremock。更多详情,请访问Extending Wiremock
答案 1 :(得分:0)
这可以通过使用Handlebar提供的内置模板帮助程序来实现。
myMockServer.stubFor(
get(urlEqualTo(myEndPoint+ "?key=key3"))
.willReturn(aResponse().withStatus(200)
.withHeader("Content-Type", "application/json")
.withBodyFile("response_{{request.query.key}}.json")