REST-versichert: Nützliche Tipps

In diesem Artikel habe ich einige hilfreiche Tipps zur Verwendung von REST-Assured, einer der häufigsten Java-Bibliotheken zur Automatisierung von REST-API-Tests, zusammengestellt.

Alle Beispiele sind von entscheidender Bedeutung. Sie stammen aus meiner Praxis, Codeüberprüfungen in mehr als 50 Projekten mit automatischen Tests durchzuführen.

Bringen Sie die Endpunkte an einen anderen Ort


Es scheint, dass dies offensichtlich ist. Aber nein, oft muss in der Anfrage Code mit fest codierten Endpunkten angezeigt werden.

Es ist am besten, Endpunkte in die statischen Konstanten der letzten Klasse einzufügen. Gleichzeitig sollte die antipatternale „konstante Schnittstelle“ vermieden werden - dies ist eine schlechte Praxis.

Vergessen Sie nicht, dass Sie mit REST-Assured Pfadparameter festlegen können, zum Beispiel:

public final class EndPoints { public static final String users = "/users/{id}"; ... } given().pathParams("id", someId).get(EndPoints.users)...; //   given().get(EndPoints.users, someId).... 

Wenn Sie in vielen Abfragen denselben Basispfad verwenden, empfiehlt es sich, ihn in eine Hotelkonstante einzufügen und an basePath zu übergeben, z. B.:

 //   url  http://host:port/appname/rest/someEndpoints private static final basePath = "/appname/rest/"; .. //       , //      : RestAssured.basePath = basePath; //     : given().basePath(basePath)... //    ,     

Gleiches gilt für den Host und den Port der zu testenden Anwendung.

ContentType / Accept


Diese Header werden in fast allen HTTP-Anforderungen verwendet. Die REST-versicherten Autoren erkannten dies und ermöglichten die Installation durch Aufrufen spezieller Methoden:

 //   : given().header("content-type", "application/json").header("accept", "application/json")...; //   : given().contentType(ContentType.JSON).accept(ContentType.JSON)...; 

Es wird empfohlen, diese Header in einer Spezifikation oder global festzulegen. Dies erhöht die Lesbarkeit Ihres Codes.

StatusCode usw.


REST-Assured bietet eine praktische Syntax zum Überprüfen jeder Komponente der HTTP-Antwort. In der Praxis tritt jedoch weiterhin ein ähnlicher Code auf:

 //   : Response response = given()...when().get(someEndpoint); Assert.assertEquals(200, response.then().extract().statusCode()); //   : given()...when().get(someEndpoint).then().statusCode(200); 

Verwenden Sie Spezifikationen


Codeduplizierung ist schlecht. Verwenden Sie Spezifikationen, um Doppelarbeit zu reduzieren. In REST-versichert können Sie Spezifikationen für Anforderung und Antwort erstellen. In der Spezifikation der Anfrage haben wir alles angegeben, was in den Anfragen dupliziert werden kann.

 RequestSpecification requestSpec = new RequestSpecBuilder() .setBaseUri("http://localhost") .setPort(8080) .setAccept(ContentType.JSON) .setContentType(ContentType.ANY) ... .log(LogDetail.ALL) .build(); //       : RestAssured.requestSpecification = requestSpec; //   : given().spec(requestSpec)...when().get(someEndpoint); 

In der Spezifikation der Antwort führen wir alle Prüfungen durch, die von Anfrage zu Anfrage dupliziert werden.

 ResponseSpecification responseSpec = new ResponseSpecBuilder() .expectStatusCode(200) .expectBody(containsString("success")) .build(); //       : RestAssured.responseSpecification = responseSpec; //   : given()...when().get(someEndpoint).then().spec(responseSpec)...; 

Sie können verschiedene Spezifikationen für verschiedene Arten von Anforderungen / Antworten erstellen und diese in der richtigen Situation verwenden.

Schreiben Sie Ihre Krücken nicht, um Objekte zu transformieren


Sie sollten Ihre POJOs nicht mit Jackson ObjectMapper in JSON konvertieren und dann die resultierende Zeichenfolge an den Anforderungshauptteil übertragen. REST-versichert leistet hierzu hervorragende Arbeit. Hierfür wird derselbe Jackson oder Gson verwendet, je nachdem, was sich im Klassenpfad befindet. JAXB wird zum Konvertieren in XML verwendet. Das ursprüngliche Format wird automatisch durch den Wert des Inhaltstyps bestimmt.

 given().contentType(ContentType.JSON).body(somePojo) .when().post(EndPoints.add) .then() .statusCode(201); //        : SomePojo pojo = given(). .when().get(EndPoints.get) .then().extract().body().as(SomePojo.class); 

Darüber hinaus kann REST-Assured HashMap hervorragend in JSON konvertieren und umgekehrt.

Nutzen Sie die Kraft von Groovy


Die REST-gesicherte Bibliothek selbst ist in Groovy geschrieben und ermöglicht es Ihnen, verschiedene Methoden von Groovy auf die empfangene JSON / XML-Antwort anzuwenden. Zum Beispiel:

 //  find, findAll         ,  collect       . //  it         Map<String, ?> map = get(EndPoints.anyendpoint).path("rootelement.find { it.title =~ 'anythingRegExp'}"); //     ,     Map<String, ?> map = get(EndPoints.anyendpoint).path("rootelement.findAll { element -> element.title.length() > 4 }"); //     sum, max, min     ,        String expensiveCar = get(EndPoints.cars).path("cars.find { it.title == 'Toyota Motor Corporation'}.models.max { it.averagePrice }.title"); 

Die Verwendung von Methoden aus Groovy kann die Menge an Code, die Sie schreiben, um den erforderlichen Wert aus der Antwort zu ermitteln, erheblich reduzieren.

Das ist alles, wenn Sie weitere Tipps und Beispiele haben, schreiben Sie diese in die Kommentare.

Source: https://habr.com/ru/post/de421005/


All Articles