REST Assured API-Test-Tutorial
โก Intelligente Zusammenfassung
REST Assured etabliert sich als ein JavaEine Open-Source-Bibliothek auf Basis von Maven, die automatisierte REST-API-Tests vereinfacht. Das Framework ermรถglicht es Qualitรคtssicherungsingenieuren, komplexe JSON-Antworten, Header, Statuscodes und Antwortzeiten mithilfe einer รผbersichtlichen BDD-รคhnlichen Syntax und nahtloser Maven-Integration zu validieren.

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 Ihr Google Nutzen Sie die Kartenansicht, um nach einem gewรผnschten Ziel zu suchen. Sofort werden Ihnen Restaurants in der Nรคhe, Transportmรถglichkeiten fรผhrender Reiseanbieter und viele weitere Optionen angezeigt. Wir alle wissen, dass dies nicht die Regel ist. Google Produkte, also wie funktioniert das? Google Wie kรถnnen diese angezeigt werden? Dafรผr werden die bereitgestellten APIs dieser Anbieter verwendet. Wenn Sie nun aufgefordert werden, ein solches Setup zu testen, noch bevor die Benutzeroberflรคche erstellt oder in Entwicklung ist, wird das Testen der APIs extrem wichtig. Wiederholte Tests mit verschiedenen Datenkombinationen machen dies zu einem idealen Anwendungsfall fรผr die Automatisierung.
Frรผher verwendeten Teams dynamische Sprachen wie Groovy Um dies zu erreichen, benรถtigten wir Ruby, was sich als schwierig erwies. Daher wurde API-Testing von funktionalen Testern nicht umfassend genutzt.
Mit Rest Assured wird das automatisierte Testen von APIs und das Senden einfacher HTTPS-Anfragen mit benutzerfreundlichen Anpassungen jedoch unkompliziert, sofern man รผber grundlegende Kenntnisse verfรผgt. JavaRest Assured ist hilfreich fรผr das Verstรคndnis von API- und Integrationstests. Es bietet hohe Sicherheit im Backend, sodass sich Frontend-Tester auf die Benutzeroberflรคche und clientseitige Operationen konzentrieren kรถnnen. Rest Assured ist Open Source und die stรคndige Erweiterung um neue Methoden und Bibliotheken macht es zu einer hervorragenden Wahl fรผr die API-Automatisierung.
REST Assured vs Postman: Hauptunterschiede
Sowohl REST Assured als auch Postman Es gibt zwar verschiedene Tools zur Validierung von REST-APIs, doch jedes eignet sich fรผr eine andere Phase des Testzyklus. Die Wahl des richtigen Tools hรคngt von den Fรคhigkeiten Ihres Teams, dem Projektumfang und den Integrationsanforderungen ab.
| Aspekt | Seien Sie versichert | Postman |
|---|---|---|
| Typ | Java Bibliothek fรผr codebasierte Automatisierung | GUI-basierter API-Client mit Skriptunterstรผtzung |
| besten Use Case | Kontinuierliche Integrationspipelines und Regressionstests | Manuelle Erkundung und schnelle API-Prรผfungen |
| Fรคhigkeitsanforderung | Core Java Erforderliche Kenntnisse | Minimale Codierung; Verwendung JavaSkriptausschnitte |
| Reporting | Integriert mit TestNG, JUnitund Allure | Integrierte Laufzeitzusammenfassungen รผber die Newman-Befehlszeilenschnittstelle |
Viele Teams nutzen Postman fรผr frรผhe Prototypenping und wechseln Sie zu REST Assured fรผr automatisierte Regressionstests, sobald die API-Konfiguration abgeschlossen ist.tract stabilisiert sich.
So richten Sie Rest Assured.io ein mit Eclipse
Die Einrichtung von REST Assured umfasst drei Kernabhรคngigkeiten: JavaSie benรถtigen eine IDE und Maven. Befolgen Sie die folgenden Schritte, um spรคtere Build-Fehler zu vermeiden.
Schritt 1) โโInstallieren Java. Beziehen Sie sich darauf Entwicklung
Schritt 2) Laden Sie zunรคchst eine IDE herunter: Eklipse
Schritt 3) Installieren Sie Maven und richten Sie Eclipse ein. Siehe werden auf dieser Seite erlรคutert.
Seien Sie versichert
- Erstellen Sie ein Maven-Projekt in Ihrer IDE. Wir verwenden IntelliJ, aber die Projektstruktur ist in jeder anderen IDE รคhnlich.
- รffnen Sie Ihre POM.xml-Datei.
Projektstruktur fรผr einen REST Assured Maven-Arbeitsbereich
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 der Version 9+:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Fehlerbehebung:
Falls Fehler auftreten und Sie sich nicht sicher sind, ob die Abhรคngigkeiten korrekt heruntergeladen wurden, befolgen Sie diese Schritte:
- Fรผhre einen Maven-Build durch, um alle Abhรคngigkeiten zu importieren. Hilfe zur Maven-Einrichtung findest du hier: Guru99
- Falls weiterhin Fehler auftreten, fรผhren Sie ein `Maven clean` und anschlieรend ein `Maven install` aus. Der Build sollte dann fehlerfrei abgeschlossen werden.
- Fรผgen Sie die folgenden Importe in Ihre Java Prรผfen Sie, ob Kompilierungsfehler vorliegen.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Erstes einfaches Rest Assured-Skript
Nachdem die Abhรคngigkeiten eingerichtet sind, kรถnnen Sie nun Ihr erstes Skript schreiben. Das Framework folgt einem verhaltensgetriebenen Entwicklungsstil (BDD), der sich fast wie Englisch liest.
Syntax:
Die Syntax von Rest Assured.io ist der am besten lesbare Teil des Frameworks, 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 Anfrageheader, Abfrage- und Pfadparameter, den Anfragetext und die Cookies. Dies ist optional, falls diese Elemente in der Anfrage nicht benรถtigt werden. |
| Wann() | Das Schlรผsselwort โwennโ kennzeichnet die Prรคmisse Ihres Szenarios. Zum Beispiel: โWennโ Sie etwas erhalten/posten/hineinfรผgen, tun Sie etwas anderes. |
| Methode() | Ersetzen Sie dies durch eine der CRUD-Operationen (get/post/put/delete). |
| Dann() | Hier kommen Ihre Assert- und Matcher-Bedingungen hin. |
Nachdem Sie nun die Einrichtung und einige Grundlagen der Syntax kennen, erstellen wir unseren ersten einfachen Test. Es ist vรถllig in Ordnung, wenn Ihnen die Struktur zunรคchst ungewohnt erscheint; mit der Zeit und durch das Interpretieren jeder Zeile werden Sie sie verstehen.
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.
Beispiel einer API-Antwort, erfasst von REST Assured
Falls beim Versuch, eine Antwort auf die Anfrage zu erhalten, ein Fehler im Browser auftritt:
- Prรผfen Sie, ob Sie HTTPS oder HTTP verwendet haben. Ihr Browser verfรผgt mรถglicherweise รผber Einstellungen, die unsichere Websites blockieren.
- Prรผfen Sie, ob ein Proxy oder eine Firewall Ihren Browser daran hindert, die Website zu รถffnen.
*Hinweis โ Sie haben hier keine Header, keinen Body und keine Cookies verwendet. Es war ein URLSie rufen also Inhalte von der API ab, anstatt bestehende Inhalte zu verรถffentlichen oder zu aktualisieren. Daher handelt es sich um einen GET-Aufruf. Merken Sie sich das, 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 namens โmyFirstRestAssuredClassโ.
Schritt 2) Erstellen Sie eine Methode namens โgetResponseBodyโ.
Schritt 3) รhnlich der zuvor kennengelernten Struktur aus gegeben, wenn und dann, geben Sie den folgenden Code ein:
gegeben(). -> Keine Header erforderlich, keine Abfrage oder Pfadparameter.
when(). -> Keine spezifische Bedingungseinstellung.
erhalten('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> nur die URL muss geliefert werden.
then(). -> Keine spezifischen Zusicherungen erforderlich.
log().all() -> Sobald die gesamte Antwort abgerufen wurde, werden die Antwort, die Header und im Grunde alles, was die Anfrage zurรผckgibt, protokolliert.
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 URL Der verwendete Code ist lang und schwer lesbar. Bei genauerem Hinsehen erkennt man, dass drei Abfrageparameter verwendet werden:
- Kundennummer
- Passwort
- Konto Nr
Rest Assured ermรถglicht es uns, jeden Teil (Abfrage, Pfad, Header-Parameter) separat zu รผbergeben, wodurch der Code lesbarer und wartungsfreundlicher wird. Auรerdem kรถnnen wir die Daten bei 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 dabei, die Darstellung zu vereinfachen.**tract nur der Hauptteil der Antwort.
Ausgang:
Den Antwortstatuscode abrufen
Die nรคchste Methode, die wir skripten werden, besteht darin, den Statuscode zu ermitteln und eine Assertion einzufรผgen, um ihn 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 es zu protokollieren, verwenden Sie 'getStatus'.Code' integrierte Methode von Rest Assured zum Abrufen des Statuscodes.
Schritt 4) Um zu bestรคtigen, dass Ihr Statuscode 200 ist, verwenden Sie die Schlรผsselwรถrter: assertThat().statusCode(erwartetCode).
**Notiz - 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:
- In diesem Szenario ist der Statuscode 200 eine positive Antwort. Gelegentlich kann es jedoch erforderlich sein, dass die Anfrage fehlschlรคgt. In diesem Fall kรถnnen Sie die Statuscodes 4XX oder 5XX verwenden. Versuchen Sie, den Statuscode durch die Angabe ungรผltiger Parameter zu รคndern und prรผfen Sie, ob die Antwort erfolgreich war.
- 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
Neben Antworttext und Statuscode stellt REST Assured auch Header, Antwortzeit und Inhaltstyp รผber verkettbare Ausdrรผcke bereit.tracTor-Methoden. Das Schlรผsselwort 'ex'tracEs ist unerlรคsslich, um diese spezifischen Teile zu beschaffen.
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 mit `get()` beginnt. Dies liegt daran, dass vor dem Absenden der Anfrage und dem Empfang der Antwort keine Vorbedingung oder รberprรผfung durchgefรผhrt wird. In solchen Fรคllen ist die Verwendung von `given().when()` optional.
Ausgang:
Geschรคftsanforderungen:
In den meisten Fรคllen benรถtigen Sie fรผr die nachfolgende Anfrage das Autorisierungstoken oder einen Session-Cookie, und diese Details werden meist 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 Antwortzeit, die die Leistungsfรคhigkeit der Anwendung misst. Die Dauer eines API-Aufrufs kann je nach Internetgeschwindigkeit, API-Leistung zum Zeitpunkt des Aufrufs, Serverlast und anderen Einflussfaktoren variieren.
Content-Type
Den Inhaltstyp der zurรผckgegebenen Antwort kรถnnen Sie mit der Methode โcontentType()โ ermitteln.
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
Ausgang
Geschรคftsanforderungen:
Manchmal ist die Ermittlung des Inhaltstyps unerlรคsslich, um sicherzustellen, dass keine Sicherheitslรผcken fรผr ursprungsรผbergreifende Bedrohungen bestehen und um zu bestรคtigen, dass die รผbermittelten Inhalte den Standards der API entsprechen.
Einzelnes JSON-Element abrufen
Anhand der gegebenen Antwort sollen Sie den Gesamtbetrag berechnen. Dazu mรผssen Sie alle Einzelbetrรคge ermitteln und addieren.
Schritte:
Schritt 1) Das Feld โamountโ befindet sich in einem Array mit dem Schlรผssel โstatementsโ, welches wiederum in der Liste mit dem Schlรผssel โreultโ enthalten ist.
Schritt 2) Rest Assured bietet einen Mechanismus, um รผber โpathโ auf die Werte in der API zuzugreifen.
Schritt 3) Der Pfad, um die Betrรคge zu ermitteln, lautet โresult.statements.AMOUNTโ. Man kann sich das wie XPath vorstellen. Selenium.
Schritt 4) Alle Betrรคge in einer Sammlung abrufen und dann alle Werte durchlaufen, 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, wandeln wir ihn zur Summation in eine Ganzzahl um.
Ausgang:
Best Practices fรผr REST-konforme Testautomatisierung
Sobald Sie die Grundlagen verstanden haben, sorgt die Anwendung bewรคhrter Vorgehensweisen fรผr eine zuverlรคssige Testsuite, auch wenn die API-Oberflรคche wรคchst. Die folgenden Praktiken helfen Teams, fehlerhafte Tests und einen hohen Wartungsaufwand zu vermeiden.
- Zentralisierung der Basis URL: Speichern Sie die Basis-URI und die Authentifizierungstoken in einer einzigen Konfigurationsklasse oder Eigenschaftendatei. Dies vermeidet Redundanz und vereinfacht den Umgebungswechsel.
- Anfrage- und Antwortspezifikationen verwenden: Erstellen Sie wiederverwendbare RequestSpecBuilder- und ResponseSpecBuilder-Objekte. Diese reduzieren den Boilerplate-Code, wenn viele Tests gemeinsame Header oder Assertions verwenden.
- JSON-Schema validieren: Kombinieren Sie REST Assured mit dem Modul json-schema-validator, um die รbereinstimmung zu bestรคtigen.tracIntegritรคtsprรผfungen des Schemas erkennen inkompatible รnderungen, bevor diese nachgelagerte Verbraucher erreichen.
- Externalisieren von Testdaten: Speichern Sie Nutzdaten in JSON-Dateien oder verwenden Sie Datenanbieter von TestNGFest codierte Daten veralten schnell.
- Unabhรคngige Tests durchfรผhren: Jeder Test sollte seine eigenen Daten einrichten und abbauen. Reihenfolgeabhรคngige Testreihen schlagen bei parallelen CI-Lรคufen unvorhersehbar fehl.
- Protokolle selektiv erfassen: Verwenden Sie `log().ifError()` in stabilen Testumgebungen und `log().all()` wรคhrend des Debuggens. Ausfรผhrliche Protokolle verlangsamen CI-Pipelines und verschleiern eigentliche Probleme.
- An CI/CD anbinden: REST Assured-Suites รผber Maven Surefire oder Failsafe auslรถsen Jenkins, GitHub Actions oder GitLab. Fรผhren Sie bei jedem Commit Smoke-Checks und รผber Nacht eine vollstรคndige Regression durch.
Wer sich diese Gewohnheiten frรผhzeitig aneignet, macht die API-Automatisierung zu einem langfristigen Vorteil und nicht zu einem fragilen Engpass.


