3

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

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

4

2 回答 2

1

到目前为止,正文文件名无法在 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:扩展类名

更多细节在扩展 Wiremock

于 2018-10-04T12:55:42.007 回答
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/上可用的各种模型。

于 2019-05-06T07:38:06.130 回答