web-dev-qa-db-fra.com

RestAssured: Comment vérifier la longueur de la réponse du tableau json?

J'ai un noeud final qui renvoie un JSON comme:

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

et un cours DTO:

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

Maintenant, je teste la longueur du tableau json retourné de cette façon:

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

Mais, y a-t-il un moyen de le faire sans lancer vers FooDto array? Quelque chose comme ça:

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

Résolu! Je l'ai résolu de cette façon:

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

J'ai résolu le même problème avec GPath.

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

Maintenant, je peux extraire le corps de la réponse sous forme de chaîne et utiliser les capacités GPath intégrées

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

Pour un exemple complet, voir http://olyv-qa.blogspot.com/2017/07/restassured-short-example.html

4
olyv

Il y a des façons. J'ai résolu avec le dessous 

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

en utilisant une nouvelle version 3.0.0

4
arulraj.net

@Hector

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

C'était vraiment un exemple malchanceux. Ici vous avez la matrice [2,2].

Si vous créez quelque chose comme ceci:

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

Maintenant, vous avez toujours réussi le test:

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

Demandez-vous si c'était intentionnel. body("size()",is(2)); Avoir la longueur de vérification d'un nœud au lieu du nombre d'enregistrements en réponse.

2
Liniel

C'est ce que vous devez faire pour obtenir de la taille.

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

une fois que vous avez la réponse, vous pouvez procéder comme suit pour obtenir la taille.

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

j'espère que cela t'aides. :)

0
roy