2016-04-07 4 views
5

Ich habe einen Endpunkt, die eine JSON zurückgibt wie:RestAssured: Wie überprüft man die Länge der JSON-Array-Antwort?

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

und eine DTO-Klasse:

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

Nun teste ich die Länge der zurückgegebenen json Array auf diese Weise:

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

Aber gibt es eine Möglichkeit, es ohne Umwandlung in FooDto Array zu tun? Etwas wie dieses:

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

Antwort

19

Gelöst! Ich habe es so gelöst:

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

Es gibt Möglichkeiten. Ich löste mit der unter

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

restassured mit 3.0.0

2

ich ähnliche Aufgabe wit GPath gelöst.

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

Jetzt kann ich Antworttext als String extrahieren und integrierte in GPath Fähigkeiten

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

Für vollständige Beispiel siehe http://olyv-qa.blogspot.com/2017/07/restassured-short-example.html