RestAssured:如何检查json数组响应的长度?

时间:2016-04-07 07:42:47

标签: json rest-assured

我有一个返回JSON的端点,如:

principal_moderator

和DTO课程:

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

现在,我正在以这种方式测试返回的json数组的长度:

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

但是,有没有办法在没有强制转换为FooDto数组的情况下执行此操作?像这样:

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

6 个答案:

答案 0 :(得分:38)

解决!我用这种方式解决了这个问题:

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

答案 1 :(得分:4)

有办法。我解决了下面的问题

@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

答案 2 :(得分:4)

我用GPath解决了类似的任务。

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

现在我可以将响应体提取为String并使用内置的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

答案 3 :(得分:2)

@埃克托

[   
   {"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));检查一个节点的长度而不是响应中的记录数。

答案 4 :(得分:1)

您只需在身体路径中呼叫size()

赞:

given()
            .accept(ContentType.JSON)
            .contentType(ContentType.JSON)
            .auth().principal(createPrincipal())
            .when()
            .get("/api/foo")
            .then()
            .statusCode(OK.value())
            .body("bar.size()", is(10))
            .body("dar.size()", is(10));

答案 5 :(得分:0)

这是您要获取尺寸所要做的。

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

收到回复后,您可以执行以下操作来获取尺寸。

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

希望这会有所帮助。 :)