解决wireMock

时间:2017-04-19 21:47:03

标签: java spring wiremock

您好,我已经对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返回动态数据?

我希望我具体到足够的,我会根据需要进行更新。

1 个答案:

答案 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")));