您好,我已经对Wiremock框架进行了新的反思。我有一个测试环境工作,但我需要我们的集成测试需要解决动态路径,如
/测试/动态/ {dynamicpath} /帮助
其中动态路径将是我想要解析的变量,然后使用json文件的子集(例如
)呈现不同的数据{ dynamicpathA:"你好", dynamicpathB" world" }
目前我有:
stubFor(get(urlPathMatching("/test/dynamic/{dynamicpath}/help"))
.withHeader("accept", equalTo("application/json"))
.willReturn(aResponse().withBody(readFile(RESOURCES + "test.json", Charset.defaultCharset()))));
将返回包含完整数据子集的整个json文件,但不返回与动态uri相关的各个组件。我的问题是有没有办法解决动态网址并从json返回动态数据?
我希望我具体到足够的,我会根据需要进行更新。
答案 0 :(得分:0)
完全可能。你想要的是Response Transformer。
你已经使用路径正则表达式匹配器做了正确的事情,它将确定一个正匹配 - 这是它的参与的结束,其余的由响应变换器决定。
您可以使用Response Transformers解析dynamicPath
部分的几个选项,您可以a)将其作为参数提供给变换器,或者b)让Response Transformer评估路径的请求URL 。以下是让Response Transformer完成所有工作的示例。
public static class DynamicTransformer extends ResponseDefinitionTransformer {
@Override
public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files, Parameters parameters) {
String path = request.getUrl();
String dynamicPath = ...; // Pull out the dynamic part
String transformedJson = ...; // Render the JSON string applicable
return new ResponseDefinitionBuilder()
.withHeader("Content-Type", "application/json")
.withStatus(200)
.withBody(transformedJson)
.build();
}
@Override
public String name() {
return "dynamic-transformer";
}
那么你的测试看起来像是
WireMockServer wireMock = new WireMockServer(wireMockConfig()
.extensions(new DynamicTransformer()));
stubFor(get(urlPathMatching("/test/dynamic/[^/]+/help"))
.withHeader("accept", equalTo("application/json"))
.willReturn(aResponse()
.withTransformers("dynamic-transformer")));