我正在尝试测试openid提供程序类。 openid消费者类正在发出http请求。我正在使用wiremock模拟对此请求的响应。我试图模拟一个有效的openid响应。但是,有效响应取决于请求参数。使用wiremock,我可以设置一个模拟请求,其中响应的主体依赖于请求参数吗?
答案 0 :(得分:6)
这是可能的,你只需要使用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)));
答案 1 :(得分:5)
Wiremock支持您自己编写的扩展,它们充当用于拦截请求和响应主体的中间件,因此您可以根据需要对其进行格式化。它非常灵活,允许您动态组成新的响应主体,甚至根本没有响应。
作为一个例子,我们在Opentable上为此编写了一个扩展,并在Maven Central上开源。它允许您将json属性视为变量并将它们插入到响应主体中。看看这个。让我们知道它是怎么回事,或者如果您有任何问题。 https://github.com/opentable/wiremock-body-transformer
答案 2 :(得分:2)
据我所知和我对WireMock的经验,没有。
您无法使用通过请求传递的参数来参数化响应。您可以做的最好的事情是使用匹配器使您的模拟服务器做出相应的响应。
我建议您使用普通的jUnit进行一些单元或集成测试,以便在这种情况下测试请求/响应。如果您想测试收据请求是否正确响应,它们应该更快。我认为WireMock是进行验收测试的替代方案,以确保您与其他REST服务的接口不会被破坏。
答案 3 :(得分:1)
我对这一点进行了相当的调查,答案是否定的(截至今天)。
您需要为每个需要唯一响应的请求设置特定(静态)响应。
答案 4 :(得分:0)
我从未使用过线索。但根据他们的online documentation,你可以编写一个匹配URL和Request body参数的模拟器。因此,您应该能够根据URL本身或嵌入请求正文中的参数返回不同的模拟。
答案 5 :(得分:0)
是的,可以在Wiremock中创建与请求匹配的存根。 请求匹配请求支持以下属性。
在您的方案中,如果要对请求正文中的值应用匹配,则可以使用以下方法为其生成存根。
{
"request": {
...
"bodyPatterns" : [ {
"equalToJson" : "{ \"total_results\": 4 }"
} ]
...
},
...
}
点击链接以获取更多详细信息:http://wiremock.org/docs/request-matching/