web-dev-qa-db-ja.com

RestAssured:JSON配列の応答の長さを確認する方法は?

次のようなJSONを返すエンドポイントがあります。

[
  {"id" : 4, "name" : "Name4"},
  {"id" : 5, "name" : "Name5"}
]

およびDTOクラス:

public class FooDto {
    public int id;
    public String name;
}

今、私はこの方法で返されたjson配列の長さをテストしています:

@Test
public void test() {
    FooDto[] foos = RestAssured.get("/foos").as(FooDto[].class);
    assertThat(foos.length, is(2));
}

しかし、FooDto配列にキャストせずにそれを行う方法はありますか?このようなもの:

@Test
public void test() {
    RestAssured.get("/foos").then().assertThat()
      .length(2);
}
16
Héctor

解決しました!私はこのように解決しました:

@Test
public void test() {
    RestAssured.get("/foos").then().assertThat()
      .body("size()", is(2));
}
43
Héctor

方法があります。私は以下で解決しました

@Test
public void test() {
 ValidatableResponse response = given().when().get("/foos").then();
 response.statusCode(200);
 assertThat(response.extract().jsonPath().getList("$").size(), equalTo(2));
}

restassured 3.0.0を使用

5
arulraj.net

GPathで同様のタスクを解決しました。

Response response = requestSpec
                .when()
                .get("/new_lesson")
                .then()
                .spec(responseSpec).extract().response();

これで、応答本文を文字列として抽出し、組み込みのGPath機能を使用できます

String responseBodyString = response.getBody().asString();

assertThat(from(responseBodyString).getList("$").size()).isEqualTo(YOUR_EXPECTED_SIZE_VALUE);
assertThat(from(responseBodyString).getList("findAll { it.name == 'Name4' }").size()).isEqualTo(YOUR_EXPECTED_SUB_SIZE_VALUE);

完全な例については、 http://olyv-qa.blogspot.com/2017/07/restassured-short-example.html を参照してください

4
olyv

@ヘクター

_[   
   {"id" : 4, "name" : "Name4"}, 
   {"id" : 5, "name" : "Name5"}
]
_

それは本当に不運な例でした。マトリックス[2,2]があります。

このようなものを作成する場合:

_[   
   {"id" : 4, "name" : "Name4"}, 
   {"id" : 5, "name" : "Name5"}, 
   {"id" : 6, "name" : "Name6"} 
]
_

今、あなたはまだテストに合格します:

_@Test
public void test() {
    RestAssured.get("/foos").then().assertThat()
      .body("size()", is(2));
}
_

意図的であったかどうかを検討してください。 body("size()",is(2));応答のレコード数ではなく、1つのノードの長さをチェックします。

2
Liniel

これは、サイズを取得するために必要なことです。

Response response = 
given()
.header("Accept","application/json")
.when()
.get("/api/nameofresource")
.then()
.extract()
.response();

応答が得られたら、次を実行してサイズを取得できます。

int size = response.jsonPath()。getList( "id")。size();

お役に立てれば。 :)

0
roy