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

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

这是可能的,你只需要使用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))); 

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

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

据我所知和我对WireMock的经验,没有。

您无法使用通过请求传递的参数来参数化响应。 您可以做的最好的事情是使用匹配器来使您的模拟服务器做出相应的响应。

我建议您使用普通的jUnit进行一些单元或集成测试,以便在这种情况下测试请求/响应。 如果您想测试收据请求是否正确响应,它们应该更快。 我认为WireMock是进行验收测试的替代方案,以确保您与其他REST服务的接口不会被破坏。

我已经对此进行了相当多的调查,答案是否定的(截至今天,无论如何)。

您需要为每个需要唯一响应的请求设置特定(静态)响应。

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