2017-04-19 103 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")));