2017-04-19 3 views
1

Hallo zusammen, ich habe relativ neu zu dem Wiremock-Framework. Ich habe Arbeit eine Testumgebung bekam, aber ich muss für unsere Integrationstests benötigen einen dynamischen Pfad wieDynamischen Pfad in Wiremock lösen

/test/dynamic/{dynamicpath}/Hilfe lösen

wo dynamische Pfad ein sein wird Variable, die ich lösen wollen und dann verschiedene Daten aus der Verwendung einer Untergruppe einer jSON-Datei wie

präsentieren { dynamicpathA: „Hallo“, dynamicpathB „Welt“ }

im Moment habe ich:

, die eine vollständige JSON-Datei mit der vollständigen Teilmenge der Daten, aber nicht die einzelnen Komponenten in Bezug auf die dynamische URI zurückgibt. Meine Frage ist, gibt es eine Möglichkeit, die dynamische URL zu lösen und dynamische Daten von der JSON zurückgeben?

Ich hoffe, dass ich spezifisch genug bin, werde ich als Notwendigkeit aktualisieren.

Antwort

0

Total möglich. Was Sie wollen, ist ein Response Transformer.

Sie haben das Richtige mit dem Pfad Regex Matcher getan, der eine positive Übereinstimmung identifizieren wird - das ist das Ende seiner Beteiligung, der Rest liegt beim Response Transformer.

Sie haben mehrere Optionen zum Analysieren des dynamicPath-Teils mit Antworttransformatoren. Sie können entweder a) dem Transformator als Parameter übergeben oder b) den Antwortsender die Anfrage-URL für den Pfad auswerten lassen. Hier ist ein Beispiel, in dem der Response Transformer die ganze Arbeit erledigt.

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"; 
    }  

Also dann Test sieht aus wie

WireMockServer wireMock = new WireMockServer(wireMockConfig() 
    .extensions(new DynamicTransformer())); 

stubFor(get(urlPathMatching("/test/dynamic/[^/]+/help")) 
    .withHeader("accept", equalTo("application/json")) 
    .willReturn(aResponse() 
    .withTransformers("dynamic-transformer"))); 
Verwandte Themen