Repos assuré. Est-il possible d'extraire de la valeur de requête json?

je reçois la réponse de cette façon:

Response response = expect().statusCode(200).given().body(requestBody).contentType("application/json")
.when().post("/admin");
String responseBody = response.getBody().asString();

j'ai un json en charge:

{"user_id":39}

puis-je extraire à la chaîne en utilisant la méthode de rest-assured seulement cette valeur = 39?

34
demandé sur Jay 2014-01-16 19:36:31

5 réponses

vous pouvez aussi faire comme ceci si vous êtes seulement intéressé à extraire le "user_id":

String userId = 
given().
        contentType("application/json").
        body(requestBody).
when().
        post("/admin").
then().
        statusCode(200).
extract().
        path("user_id");

Dans sa forme la plus simple, il ressemble à ceci:

String userId = get("/person").path("person.userId");
40
répondu Johan 2014-01-22 10:13:26

j'ai trouvé la réponse :)

Utiliser JsonPath ou XmlPath (dans le cas où vous avez XML) pour obtenir des données à partir du corps de réponse.

Dans mon cas:

JsonPath jsonPath = new JsonPath(responseBody);
int user_id = jsonPath.getInt("user_id");
15
répondu Jay 2014-01-17 09:53:57

Il y a plusieurs façons. Personnellement, j'utilise les suivantes:

extraction d'une seule valeur:

String user_Id =
given().
when().
then().
extract().
        path("user_id");

travailler avec l'ensemble de la réponse lorsque vous en avez besoin de plus d'un:

Response response =
given().
when().
then().
extract().
        response();

String userId = response.path("user_id");

en extraire un en utilisant le JsonPath pour obtenir le bon type:

long userId =
given().
when().
then().
extract().
        jsonPath().getLong("user_id");

le dernier est vraiment utile quand vous voulez faire correspondre la valeur et le type i.e.

assertThat(
    when().
    then().
    extract().
            jsonPath().getLong("user_id"), equalTo(USER_ID)
);

Le reste est assuré documentation est assez descriptif et complet. Il y a beaucoup de des moyens pour obtenir ce que vous demandez: https://github.com/jayway/rest-assured/wiki/Usage

14
répondu magiccrafter 2015-11-23 11:25:16

Pour sérialiser la réponse dans une classe, définir la classe cible

public class Result {
    public Long user_id;
}

Et la carte de réponse:

Response response = given().body(requestBody).when().post("/admin");
Result result = response.as(Result.class);

vous devez avoir Jackson ou Gson dans le classpath car la documentation stipule: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html#as(java.lang.Class)

8
répondu Milanka 2015-05-12 12:54:56
JsonPath jsonPathEvaluator = response.jsonPath();
return jsonPathEvaluator.get("user_id").toString();
0
répondu infant_coder 2018-09-21 15:40:00