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

时间:2018-04-21 13:37:51

标签: wiremock http-mock

我正在使用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。非常感谢..

2 个答案:

答案 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")

检查http://wiremock.org/docs/response-templating/上可用的各种型号。