it-swarm.com.de

Seien Sie versichert. Ist es möglich, den Wert von Request Json zu extrahieren?

Ich bekomme auf diese Weise eine Antwort:

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

Ich habe einen Json als Antwort.

{"user_id":39}

Könnte ich mit der rest-assured-Methode nur diesen Wert = 39 in eine Zeichenfolge extrahieren? 

39
Jay

Ich habe die Antwort gefunden :)

Verwenden Sie JsonPath oder XmlPath (falls Sie über XML verfügen), um Daten aus dem Antworttext zu erhalten.

In meinem Fall:

JsonPath jsonPath = new JsonPath(responseBody);
int user_id = jsonPath.getInt("user_id");
15
Jay

Sie können dies auch tun, wenn Sie nur die "user_id" extrahieren möchten:

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

In seiner einfachsten Form sieht es so aus:

String userId = get("/person").path("person.userId");
40
Johan

Es gibt mehrere Möglichkeiten. Ich persönlich benutze die folgenden: 

einzelwert extrahieren:

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

arbeiten Sie mit der gesamten Antwort, wenn Sie mehr als eine brauchen:

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

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

extrahieren Sie eine mit JsonPath, um den richtigen Typ zu erhalten:

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

Letzteres ist wirklich nützlich, wenn Sie mit dem Wert und dem Typ übereinstimmen möchten, d. H. 

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

Die restgesicherte Dokumentation ist ziemlich beschreibend und umfassend. Es gibt viele Möglichkeiten, um das zu erreichen, was Sie fragen: https://github.com/jayway/rest-assured/wiki/Usage

16
magiccrafter

Um die Antwort in eine Klasse zu serialisieren, definieren Sie die Zielklasse

public class Result {
    public Long user_id;
}

Und Kartenantwort darauf:

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

Sie müssen Jackson oder Gson im Klassenpfad haben, da in der Dokumentation Folgendes angegeben ist: http://rest-assured.googlecode.com/svn/tags/2.3.1/apidocs/com/jayway/restassured/response/ResponseBodyExtractionOptions.html# als (Java.lang.Class)

8
Milanka
JsonPath jsonPathEvaluator = response.jsonPath();
return jsonPathEvaluator.get("user_id").toString();