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, sodass auch die Feststellung Ihrer erwarteten Ergebnisse ziemlich unkompliziert ist. Rest Assured verfügt über Methoden zum Abrufen von Daten aus nahezu jedem Teil der Anfrage und Antwort, unabhängig davon, wie komplex die JSON-Strukturen sind.

Für die Test-Community ist das API-Automatisierungstesten noch neu und eine Nische. Die Komplexität von JSON hält das API-Testen unerforscht. Aber das macht es im Testprozess nicht weniger wichtig. Das Rest Assured.io-Framework hat es mithilfe der grundlegenden Java-Grundlagen sehr einfach gemacht, sodass es sehr erstrebenswert ist, es zu lernen.

Warum brauchen Sie 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 ist das automatisierte Testen von APIs und das Senden einfacher HTTPS-Anfragen mit benutzerfreundlichen Anpassungen einfach, wenn man über grundlegende Java-Kenntnisse verfügt. Man muss sich mit API-Tests und Integrationstests auskennen, aber nach dieser Automatisierung gibt Rest Assured sehr viel Vertrauen in das Backend, während sich Frontend-Tests nur auf die Benutzeroberfläche und clientseitige Vorgänge konzentrieren können. Rest Assured ist eine Open Source mit vielen zusätzlichen Methoden und Bibliotheken, die hinzugefügt werden, was es zu einer großartigen Wahl für die API-Automatisierung macht.

So richten Sie Rest Assured.io ein mit Eclipse

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

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

Schritt 3) Installieren Sie Maven und richten Sie Eclipse ein. Siehe hier.

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 Java Benutzer von Versionen < 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 Java Benutzer von 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 eine der 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 – https://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.

*Hinweis – 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('https://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("https://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 weniger lesbar ist. Wenn Sie genau hinsehen, werden Sie feststellen, dass 3 Abfrageparameter verwendet werden, nämlich

  1. Kundennummer
  2. Passwort
  3. Konto Nr

Seien Sie versichert, dass wir jeden Teil (Abfrage, Pfad, Header-Parameter) separat übergeben können, wodurch der Code lesbarer und einfacher zu warten ist. Außerdem können wir die Daten nach Bedarf aus einer externen Datei 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("https://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:

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("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

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

Ausgang:

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="https://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("https://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("https://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:

Geschäftsanforderungen:

In einigen Fällen müssen Sie für die nachfolgende Anforderung das Autorisierungstoken oder ein Sitzungscookie verwenden. Meistens werden diese Details 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:

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

Ausgang

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 der Beträge lautet „result.statements.AMOUNT“. Stellen Sie es sich wie Xpath in Selenium vor.

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:

Zusammenfassung

  • Rest Assured ist eine Gruppe von Java-Bibliotheken, die uns die Automatisierung ermöglichen Rest-API-Tests
  • Seien Sie versichert, Java-basiert und Kenntnisse der Kern Java reicht aus, um es zu lernen
  • Es hilft beim Abrufen von Anforderungs- und Antwortwerten aus komplizierten JSON-Strukturen
  • Die 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.

Mehr lesen Weiterlesen