web-dev-qa-db-ja.com

Rest-assured forpayloadでJsonファイルを使用する

テスト目的のRESTAPI呼び出しのペイロードとしてPOSTになる巨大なJSONファイルがあります。次のようなものを試しました:

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


}

次のようにエラーが発生します:

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

ファイルを読み取り、本文を文字列として渡すことで実行できますが、ファイルオブジェクトを直接渡すことができ、これは機能しません。

十分に調べたところ、うまくいかないようです。安心して問題を解決しました。 https://github.com/jayway/rest-assured/issues/674

6
Bhaskar Mishra

安心したチームに問題を投稿した後。修正があります。修正をテストしたところ、問題は解決しました。

安心からのメッセージ:

修正する必要があるため、この問題に対処する新しいスナップショットを展開しました。次のMavenリポジトリを追加した後、バージョン2.9.1-SNAPSHOTを試してください:

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

詳細情報: https://github.com/jayway/rest-assured/issues/674#issuecomment-210455811

3
Bhaskar Mishra

ジェネリックメソッドを使用してjsonから読み取り、それを文字列として送信します。

public String generateStringFromResource(String path) throws IOException {

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

}

だからあなたの例では:

@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"));
}
3
Luke D. Smith