2016-04-12 4 views
4

Ich habe eine große JSON-Datei zu POST als Payload eines Rest-API-Aufrufs zu Testzwecken. Ich habe versucht, so etwas wie:mit einer JSON-Datei in Rest-sicher für Payload

public void RestTest() throws Exception { 
    File file = new File("/Users/bmishra/Code_Center/stash/experiments/src/main/resources/Search.json"); 
    String content = null; 

    given().body(file).with().contentType("application/json").then().expect(). 
      statusCode(200). 
      body(equalTo("true")).when().post("http://devsearch"); 


} 

und erhalten Fehler wie:

java.lang.UnsupportedOperationException: Internal error: Can't encode /Users/bmishra/Code_Center/stash/experiments/src/main/resources/Search.json to JSON. 

ich durch das Lesen der Datei und das Bestehen der Körper als String und die Arbeiten ausführen können, aber ich sehe ich direkt das Dateiobjekt passieren kann und das funktioniert nicht.

Nach genügend Forschung scheint es, dass es nicht funktioniert. Ich habe das Problem mit der Ruhe gelöst. https://github.com/jayway/rest-assured/issues/674

+0

nur aus der Datei lesen und den gelesenen Inhalt an den Parser senden. – Rugal

Antwort

2

nach der Ausgabe mit dem Rest der Veröffentlichung -gesichertes Team. Ich habe eine Lösung. Ich habe das Update getestet und das Problem wurde behoben.

Nachricht von Rest-sicher:

Es nun behoben werden soll, so habe ich jetzt einen neuen Snapshot eingesetzt, die dieses Problem beheben sollen. Bitte versuchen Sie es Version 2.9.1-SNAPSHOT nach dem folgend Maven Repository hinzugefügt hat:

<repositories> 
     <repository> 
      <id>sonatype</id> 
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url> 
      <snapshots /> 
     </repository> 
</repositories> 

Für weitere Informationen: https://github.com/jayway/rest-assured/issues/674#issuecomment-210455811

2

Ich benutze eine generische Methode aus dem json zu lesen und dass als Zeichenfolge senden, das heißt:

public String generateStringFromResource(String path) throws IOException { 

    return new String(Files.readAllBytes(Paths.get(path))); 

} 

So in Ihrem Beispiel:

@Test 
public void post() throws IOException { 

    String jsonBody = generateStringFromResource("/Users/bmishra/Code_Center/stash/experiments/src/main/resources/Search.json") 

    given(). 
      contentType("application/json"). 
      body(jsonBody). 
    when(). 
      post("http://dev/search"). 
    then(). 
      statusCode(200). 
      body(containsString("true")); 
} 
+0

Ja Ich kann den Inhalt der Datei als String senden, aber das ist ein zusätzlicher Schritt. Wenn ich die Methodendefinition lese, scheint es eine Möglichkeit zu bieten, ein Dateiobjekt zu übergeben. Ich möchte es verwenden, da es den Code sauberer erscheinen lässt. –

+0

Es ist ein zusätzlicher Schritt in Ihrem Code, aber in Bezug auf die Leistung ist es wahrscheinlich weniger kostenintensiv als REST-gesichert, um die Datei zu verschlüsseln. Die letzten Änderungen, die du vorgenommen hast, sollten nach dem funktionieren, was ich in Javadocs sehen kann. Ist dein JSON-Inhalt gut geformt? –

+0

: Ja, der neueste Code funktioniert. Ich wundere mich immer noch, warum die Methoden, die vom Rest versichert sind, keine Datei als Eingabeobjekt nehmen und den Fehler aufwerfen. Ich habe eine allgemeine Methode geschrieben, um sicherzustellen, dass für jeden Test, den ich nicht habe, die String-Konvertierung durchgeführt wird, und das funktioniert gut. –