2016-04-07 5 views
5

У меня есть конечная точка, которая возвращает JSON как:RestAssured: Как проверить длину ответа массива 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); 
} 

ответ

19

Решенный! Я решил это так:

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

Есть способы. Я решил с ниже

@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

Я решил подобную задачу остроумие 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