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

标签 wiremock http-mock

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

相关文章:

java - Wiiremock http 失败错误

java - Wiremock - 验证唯一的 JSON 是否符合预期?

xamarin - 如何在 Xamarin.UITest 项目中使用 WireMock.Net?

javascript - 使用 Nock 或 httpMock 在 catch block 中测试异步代码

go - HttpMock 没有拦截 Resty 调用

linux - 使用 crontab 启动 wiremock-standalone 时出现问题

java - 使用 WireMock 设置 Content-Length HTTP header 作为响应