使用wiremock,我可以返回一个依赖于post请求的主体

Ale*_*lay 16 java junit

我正在尝试测试openid提供程序类.openid消费者类正在发出http请求.我正在使用wiremock模拟对此请求的响应.我试图模拟一个有效的openid响应.但是,有效响应取决于请求参数.使用wiremock,我可以设置一个模拟请求,其中响应的主体依赖于请求参数吗?

Pie*_*syP 10

这是可能的,你只需要使用ResponseTansformer.在下面的示例代码中,responseDefinition由下面给出的存根确定.在这里,我通过简单地将主体字节返回给调用者来模拟编码服务.虽然在变压器中,我可以根据请求的内容自由返回任何我喜欢的内容.

int port = 8080;
WireMockServer wireMockServer = new WireMockServer(new WireMockConfiguration().port(port).extensions(new ResponseTransformer() {
    @Override
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files) {
        return new ResponseDefinitionBuilder().like(responseDefinition)
                .withBody(request.getBodyAsString().getBytes())
                .build();
    }

    @Override
    public String name() {
        return "request body returning request transformer";
    }
}));
wireMockServer.start();
WireMock.configureFor("localhost", port);

stubFor(post(urlEqualTo("/encode"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/octet-stream")
                .withStatus(200)));

stubFor(post(urlEqualTo("/decode"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/octet-stream")
                .withStatus(200)));
Run Code Online (Sandbox Code Playgroud)


Hun*_*ran 5

Wiremock支持您自己编写的扩展,它们充当用于拦截请求和响应主体的中间件,因此您可以根据需要对其进行格式化.它非常灵活,允许您动态组成新的响应主体,甚至根本没有响应.

例如,我们在Opentable上为此编写了一个扩展,并在Maven Central上开源.它允许您将json属性视为变量并将它们插入到响应主体中.看看这个.让我们知道它是怎么回事,或者如果您有任何问题. https://github.com/opentable/wiremock-body-transformer


dka*_*zel 0

我从来没有使用过wiremock。但根据他们的在线文档,您可以编写一个匹配 URL 和请求正文参数的模拟。因此,您应该能够根据 URL 本身或请求正文中嵌入的参数返回不同的模拟。