REST Assured-Tutorial für API-Automatisierungstests (Beispiel)

Was ist Rest Assured?

Seien Sie versichert ermöglicht Ihnen das Testen von REST-APIs mithilfe von Java-Bibliotheken und lässt sich gut in Maven integrieren. Es verfügt über sehr effiziente Matching-Techniken, so dass es auch ziemlich einfach ist, die erwarteten Ergebnisse durchzusetzen. Rest Assured verfügt über Methoden zum Abrufen von Daten aus fast jedem Teil der Anfrage und Antwort, egal wie hoch diese istplex Die JSON-Strukturen sind.

Für die Testkommunikationunity, API-Automatisierungstests sind noch neu und eine Nische. Die JSON-complexProbleme sorgen dafür, dass API-Tests unerforscht bleiben. Dies macht es jedoch nicht weniger wichtig im Testprozess. Das Rest Assured.io-Framework hat es sehr einfach gemacht, grundlegende Java-Grundlagen zu verwenden, was es zu einer sehr wünschenswerten Sache macht, es zu lernen.

Warum brauchen Rest-Assured?

Stellen Sie sich vor, Sie öffnen Ihre Google-Kartenansicht und suchen nach einem Ort, den Sie besuchen möchten. Sie sehen sofort Restaurants in der Nähe und Optionen für den Pendelverkehr. von einigen führenden Reiseanbietern und sehen Sie so viele Optionen, die Ihnen zur Verfügung stehen. Wir alle wissen, dass es sich nicht um Google-Produkte handelt. Wie schafft es Google dann, dies anzuzeigen? Sie nutzen die offengelegten APIs dieser Anbieter. Wenn Sie nun gebeten werden, diese Art von Setup zu testen, noch bevor die Benutzeroberfläche erstellt oder in der Entwicklung ist, wird das Testen von APIs äußerst wichtig und das wiederholte Testen mit unterschiedlichen Datenkombinationen macht es zu einem sehr geeigneten Fall für die Automatisierung.

Früher verwendeten wir dynamische Sprachen wie Groovy und Ruby, um dies zu erreichen, und das war eine Herausforderung. Daher wurden API-Tests nicht durch Funktionstests untersucht.

Aber mit Rest Assured, dem automatisierten Testen von APIs, ist das Senden einfacher https-Anfragen mit benutzerfreundlichen Anpassungen einfach, wenn man über grundlegende Java-Kenntnisse verfügt. Es ist erforderlich, um API-Tests und Integrationstests zu verstehen, aber nach dieser Automatisierung gibt Rest Assured sehr gutes Vertrauen in das Backend, während sich Front-End-Tests nur auf die Benutzeroberfläche und die Client-Seite konzentrieren können operationen. Rest Assured ist eine Open-Source-Lösung mit vielen zusätzlichen Methoden und Bibliotheken, die es zu einer großartigen Wahl für die API-Automatisierung gemacht haben.

So richten Sie Rest Assured.io ein mit Eclipse

Schritt 1) ​​Installieren Sie Java. Beziehen Sie sich darauf Guide

Schritt 2) Laden Sie zunächst eine IDE herunter: eclipse

Schritt 3) Installieren Sie Maven und richten Sie es ein eclipse. Verweisen wenn sie hier klicken.

Seien Sie versichert

  1. Erstellen Sie ein Maven-Projekt in Ihrer IDE. Wir verwenden Intellij, aber Sie erhalten eine ähnliche Struktur auf jeder IDE, die Sie verwenden.
  2. Öffnen Sie Ihre POM.xml
Projektstruktur
Projektstruktur

Für Rest Assured.io: Für Benutzer der Java-Version < 9:

Fügen Sie die folgende Abhängigkeit zu Ihrer POM.xml hinzu:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Für Rest Assured.io: Für Benutzer von Java Version 9+:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Fehlerbehebung:

Falls Sie Fehler sehen und nicht sicher sind, ob die Abhängigkeiten ordnungsgemäß heruntergeladen wurden,

  1. Führen Sie einen Maven-Build durch, um alle Abhängigkeiten zu importieren. Auch hier finden Sie Hilfe zur Maven-Einrichtung auf guru99.
  2. Dennoch sehen Sie Fehler, führen dann eine Maven-Bereinigung und anschließend eine Maven-Installation durch, und es sollte ohne Fehler erstellt werden.
  3. Sie können die folgenden Zeilen in Ihre Java-Klasse einfügen und sehen, dass keine Kompilierungsfehler vorliegen.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Erstes einfaches Rest Assured-Skript

Syntax:

Die Syntax von Rest Assured.io ist der schönste Teil, da sie sehr BDD-ähnlich und verständlich ist.

Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Erläuterung:

Code Erläuterung
Gegeben() Mit dem Schlüsselwort „Given“ können Sie einen Hintergrund festlegen. Hier übergeben Sie die Anforderungsheader, Abfrage- und Pfadparameter, Text und Cookies. Dies ist optional, wenn diese Elemente in der Anfrage nicht benötigt werden
Wann() Das Schlüsselwort „when“ markiert die Prämisse Ihres Szenarios. Zum Beispiel: „Wenn“ Sie etwas bekommen/posten/einstellen, tun Sie etwas anderes.
Methode() Ersetzen Sie dies durch ein beliebiges CRUD operationen(get/post/put/delete)
Dann() Hier finden Sie Ihre Assert- und Matcher-Bedingungen

Nachdem Sie nun die Einrichtung und einige Hintergrundinformationen zur Syntax haben, erstellen wir unseren ersten einfachen Test. Es ist in Ordnung, wenn Ihnen die Struktur bisher neu erscheint. Wenn Sie jede Zeile weiter interpretieren, werden Sie den Dreh rauskriegen.

Was wirst du holen?

Öffnen Sie Ihren Browser und klicken Sie auf – http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Stellen Sie sicher, dass Sie Folgendes sehen.

Rest Assured-Skript

Falls im Browser eine Fehlermeldung angezeigt wird, wenn Sie versuchen, eine Antwort auf die Anfrage zu erhalten,

  1. Überprüfen Sie, ob Sie Https oder Http verwendet haben. Ihr Browser verfügt möglicherweise über Einstellungen, die das Öffnen unsicherer Websites verhindern.
  2. Überprüfen Sie, ob ein Proxy oder eine Firewall Ihren Browser daran hindert, Websites zu öffnen.

*Note – Sie haben hier keine Header, keinen Body und kein Cookie verwendet. Es war eine URL und außerdem erhalten Sie Inhalte von der API und veröffentlichen oder aktualisieren keine vorhandenen Inhalte, sodass es sich um einen GET-Aufruf handelt. Denken Sie daran, um unseren ersten Test besser zu verstehen.

Das Ziel Ihres Tests:

Das Ziel des Skripts besteht darin, auf Ihrer IDE-Konsole dieselbe Ausgabe zu drucken, die Sie über Rest Assured im Browser erhalten haben.

Lassen Sie uns dies mit den folgenden Schritten codieren:

Den Antworttext abrufen

Schritt 1) Erstellen Sie eine Klasse mit dem Namen „myFirstRestAssuredClass“.

Schritt 2) Erstellen Sie eine Methode namens „getResponseBody“

Schritt 3) Geben Sie den folgenden Code ein, ähnlich wie bei der zuvor erlernten Struktur von „gived“, wenn und dann

gegeben(). -> Keine Header erforderlich, keine Abfrage oder Pfadparameter.

Wann(). -> Keine spezifische Bedingungseinrichtung

erhalten('http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->nur die URL muss angegeben werden

Dann(). -> Keine spezifischen Aussagen erforderlich

Protokoll(). all() -> Sobald die gesamte Antwort abgerufen wurde, Protokollantwort, Header, im Wesentlichen alles, was die Anfrage an Sie zurückgibt.

public static void getResponseBody(){
   given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Beachten Sie nun, dass die verwendete URL lang und kürzer ist readableWenn Sie genau hinsehen, werden Sie feststellen, dass drei Abfrageparameter verwendet werden

  1. Kundennummer
  2. Passwort
  3. Konto Nr

Seien Sie versichert, es hilft uns, jeden Teil (Abfrage, Pfad, Header-Parameter) separat zu übergeben und so den Code besser zu machen readable und pflegeleicht. Außerdem können wir die Daten aus einer externen Datei nach Bedarf parametrisieren.

Für die Verwendung von Abfrageparametern kehren wir zu unserer Definition der Syntax zurück und stellen fest, dass sie alle als Teil von gegeben übergeben werden.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**Beachten Sie, dass wir „body“ anstelle von „all“ verwendet haben; Dies hilft uns, nur den Hauptteil der Antwort zu extrahieren.

Ausgang:

Ausgabe für getResponseBody
Ausgabe für getResponseBody

Den Antwortstatuscode abrufen

Die nächste Methode, die wir per Skript erstellen, besteht darin, den Statuscode abzurufen und außerdem eine Behauptung zu setzen, um diesen zu validieren.

Schritt 1) Erstellen Sie eine Methode namens getResponseStatus()

Schritt 2) Verwenden Sie dieselbe Anforderungsstruktur wie oben. Kopieren Sie es und fügen Sie es ein.

Schritt 3) Anstatt ihn zu protokollieren, verwenden wir die integrierte Methode „getStatusCode“ von Rest Assured, um den Statuscodewert abzurufen

Schritt 4) Um zu bestätigen, dass Ihr Statuscode 200 ist, verwenden wir die Schlüsselwörter „asserThat().statusCode(expectedCode)“

**Hinweis – URL ist eine Variable, die der Einfachheit halber verwendet wird. URL enthält die gesamte API-Anfrage-URL

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

Ausgang:

Ausgabe für getResponseStatus
Ausgabe für getResponseStatus

Geschäftsanforderungen

Eine der Grundregeln der Automatisierung besteht darin, dass wir Kontrollpunkte setzen müssen, damit der Test nur dann fortgesetzt wird, wenn alle erforderlichen Bedingungen erfüllt sind. Bei API-Tests besteht die grundlegendste Validierung darin, zu prüfen, ob der Statuscode der Anfrage im 2XX-Format vorliegt.

Der vollständige Code bisher:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

     getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* Hinweis:

  1. 200 ist eine erfolgreiche Antwort für dieses Szenario. Manchmal muss die Anfrage auch fehlschlagen, und dann können Sie 4XX oder 5XX verwenden. Versuchen Sie, den Statuscode durch die Angabe ungültiger Parameter zu ändern und überprüfen Sie dies.
  2. Wenn wir eine Bedingung aktivieren, erfolgt kein Ausdruck auf der Konsole, es sei denn, es liegt ein Fehler vor.

Skript zum Abrufen verschiedener Teile einer Antwort

Das Abrufen des Antworttexts und des Antwortstatuscodes wird bereits im obigen Abschnitt behandelt. Es ist erwähnenswert, dass das Schlüsselwort „extract“ sehr wichtig ist, um verschiedene Teile der Antwort abzurufen.

Kopfzeile

Rest Assured ist eine sehr unkomplizierte Sprache und das Abrufen von Headern ist genauso einfach. Der Methodenname ist headers(). Wie zuvor werden wir eine eigenständige Methode erstellen, um dasselbe zu tun.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Bitte beachten Sie, dass „given().when()“ hier übersprungen wird und die Codezeile bei get() beginnt. Dies liegt daran, dass hier keine Vorbedingung oder Überprüfung vorgenommen wird, um die Anfrage zu erfüllen und eine Antwort zu erhalten. In solchen Fällen ist es optional, dasselbe zu verwenden.

Ausgang:

Ausgabe für getResponseHeader
Ausgabe für getResponseHeader

Geschäftsanforderungen:

Nicht selten müssten Sie für die nachfolgende Anfrage das Autorisierungstoken oder ein Sitzungscookie verwenden, und meistens ist dies der Falltails werden als Header der Antwort zurückgegeben.

Reaktionszeit

Um die zum Abrufen der Antwort vom Backend oder anderen Downstream-Systemen benötigte Zeit zu ermitteln, stellt Rest Assured eine Methode namens „timeIn“ mit einer geeigneten timeUnit bereit, um die zum Zurücksenden der Antwort benötigte Zeit zu ermitteln.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

Ausgang:

Ausgabe für getResponseTime
Ausgabe für getResponseTime

Geschäftsanforderungen:

Ein sehr wichtiges Merkmal beim Testen von APIs ist ihre Reaktionszeit, um die Leistung der Anwendung zu messen. Beachten Sie, dass Ihr Anruf abhängig von Ihrer Internetgeschwindigkeit, der Leistung der API zu diesem Zeitpunkt, der Serverauslastung und anderen Faktoren, die sich auf die Zeit auswirken, mehr oder weniger lange dauern kann.

Content-Type

Sie können den Inhaltstyp der zurückgegebenen Antwort mithilfe der Methode „contentType ()“ abrufen.

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Output

Ausgabe für getContentType
Ausgabe für getContentType

Geschäftsanforderungen:

Manchmal ist es wichtig, den Inhaltstyp zu ermitteln, um sicherzustellen, dass keine Sicherheitslücken für ursprungsübergreifende Bedrohungen bestehen, oder um sicherzustellen, dass der übergebene Inhalt den Standards der API entspricht.

Einzelnes JSON-Element abrufen

Aus der gegebenen Antwort werden Sie gebeten, den Gesamtbetrag zu berechnen. Sie müssen jeden Betrag abrufen und zusammenrechnen.

Schritte:

Schritt 1) Das Betragsfeld befindet sich in einem Array mit dem Schlüssel „Anweisungen“, das wiederum in der Liste mit dem Schlüssel „Ergebnis“ enthalten ist.

Schritt 2) Rest Assured bietet einen Mechanismus, um die Werte in der API mithilfe von „Pfad“ zu erreichen.

Schritt 3) Der Pfad zum Erreichen von Beträgen lautet „result.statements.AMOUNT“. Stellen Sie es sich wie Xpath vor selenium.

Schritt 4) Rufen Sie alle Beträge in einer Sammlung ab und durchlaufen Sie dann alle Werte, um die Summe zu berechnen

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Hinweis: Da der Betragswert vom Datentyp „String“ ist, konvertieren wir ihn in eine Ganzzahl und verwenden ihn für die Summierung.

Ausgang:

Ausgabe für getSpecificPartOfResponse
Ausgabe für getSpecificPartOfResponse

Zusammenfassung

  • Rest Assured ist eine Gruppe von Java-Bibliotheken, die uns die Automatisierung ermöglichen Rest-API-Tests
  • Rest Assured basiert auf Java und verfügt über Kernkenntnisse Javac reicht aus, um es zu lernen
  • Es hilft beim Abrufen von Anforderungs- und Antwortwerten aus komplizierten JSON-Strukturen
  • Der Cavalon Sentinel ist das AutoGyro-Premiummodell mit nebeneinander angeordneten Sitzen, verfügbar mit dem neuen hochmodernen und kraftstoffsparenden Rotax XNUMX iS-Motor. API Die Anfrage kann mit einer Vielzahl von Headern, Abfragen, Pfadparametern und allen festzulegenden Sitzungen oder Cookies angepasst werden.
  • Es hilft beim Festlegen von Assert-Anweisungen und -Bedingungen.
  • Während Rest Assured sehr hilfreich ist, wenn die Antwort vom Typ JSON ist, funktionieren die Methoden möglicherweise nicht reibungslos, wenn der Inhaltstyp HTML oder einfacher Text ist.