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

Wiremock:根据请求参数选择正文文件名,wiremock,http-mock,Wiremock,Http Mock,我使用wiremock模拟http服务器,并从json文件返回响应(使用withBodyFile方法) 现在我想根据请求参数选择并返回响应json文件。对于下面的示例,我想定义一个存根,以便根据请求参数选择主体文件 myMockServer.stubFor( get(urlEqualTo(myEndPoint+ "?key=key1")) .willReturn(aResponse().withStatus(200) .withHeader("Conte

我使用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")

你知道这怎么可能吗?我尝试定义transformer,但无法从重写方法中的响应对象获取流源路径,因此无法使用该appraoch。非常感谢。

主体文件名目前无法在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()并形成任何 文件路径。根据需要创建文件路径,并在返回的响应定义中将其设置为bodyFile

别忘了以--extensions:Extension类名开始wiremock


有关详细信息,请参见

,这可以通过使用Handlebar提供的内置模板帮助程序来实现

myMockServer.stubFor(
       get(urlEqualTo(myEndPoint+ "?key=key3"))
       .willReturn(aResponse().withStatus(200)
       .withHeader("Content-Type", "application/json")
       .withBodyFile("response_{{request.query.key}}.json")
请在上查看可用的各种型号