2017-04-19 100 views
1

嗨,我已经使用了Wiremock框架的新功能。我有一个测试环境工作,但我需要为我们的集成测试需要解决动态路径如解决wireMock中的动态路径

/测试/动态/ {} dynamicpath /帮助

其中动态路径将是一个变量,我想解决,然后从使用JSON文件这样的一个子集作为

呈现不同的数据:目前我有

{ dynamicpathA“你好”, dynamicpathB“世界” }:

stubFor(get(urlPathMatching("/test/dynamic/{dynamicpath}/help")) 
      .withHeader("accept", equalTo("application/json")) 
      .willReturn(aResponse().withBody(readFile(RESOURCES + "test.json", Charset.defaultCharset())))); 

这将返回一个完整的json文件与数据的完整子集,但不是与动态uri相关的单个组件。我的问题是有解决动态url和从json返回动态数据的方法吗?

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

回答

0

完全可能。你想要的是一个Response Transformer

你已经做了正确的道路正则表达式匹配,它将识别一个正匹配 - 这是它的参与尽头,其余的是响应变压器。

对于使用响应变换器解析出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")));