REST-Client-Tests mit dem Restito Tool

Inhaltsverzeichnis:

Anonim

Was ist REST?

REST steht für "REpresentational State Transfer", eine neue Art der Kommunikation zwischen zwei beliebigen Systemen zu einem bestimmten Zeitpunkt. Eines der Systeme heißt "REST-Client", das andere "REST-Server".

In diesem REST-Tutorial lernen Sie:

  • Was ist REST?
  • Was ist ein REST-Client?
  • Was ist REST Server?
  • Was ist Restito?
  • Wie teste ich den REST-Client mit Restito?
  • Vorteile der Verwendung von Restito Framework für REST-Client-Tests
  • Nachteile der Verwendung von Restito Framework für REST-Client-Tests

Bevor Sie sich mit Restito Framework für REST-Client-Tests vertraut machen, sollten Sie zunächst einige Grundlagen erlernen.

Was ist ein REST-Client?

Der REST-Client ist eine Methode oder ein Tool zum Aufrufen einer REST-Service-API, die für die Kommunikation durch ein System oder einen Dienstanbieter verfügbar gemacht wird. Beispiel: Wenn eine API verfügbar ist, um Verkehrsinformationen in Echtzeit über eine Route von Google abzurufen, wird die Software / das Tool, die bzw. das die Google-Verkehrs-API aufruft, als REST-Client bezeichnet.

Was ist REST Server?

Es ist eine Methode oder eine API, die der Kommunikation durch ein System oder einen Dienstanbieter ausgesetzt ist. Beispielsweise stellt Google eine API zur Verfügung, um Verkehrsinformationen in Echtzeit auf einer bestimmten Route abzurufen.

Hier muss der Google-Server betriebsbereit sein, um Anforderungen von verschiedenen Clients an die exponierte API abzuhören.

Beispiel:

Es ist Zeit, aus den obigen Definitionen ein vollständiges End-to-End-Szenario zu erstellen.

Betrachten wir eine Taxibuchungsanwendung wie Uber, da ein Unternehmen Echtzeitinformationen zur Verkehrssituation auf den Strecken benötigt, auf denen sich ein bestimmtes Fahrzeug befindet.

Rest Client:

Hier ist der Client eine mobile Uber-Anwendung, bei der sich der Treiber angemeldet hat. Diese App sendet eine Anfrage an die von Google Maps bereitgestellte REST-API, um die Echtzeitdaten abzurufen. Zum Beispiel eine HTTP-GET-Anforderung.

Rest Server:

In diesem Beispiel ist Google der Dienstanbieter, und die API von Google Maps antwortet mit den erforderlichen Details auf die Anfrage der Uber-App.

Sowohl der Client als auch der Server sind für die REST-Kommunikation gleich wichtig.

Hier haben wir Beispiele für Automatisierungstests nur des REST-Clients implementiert. Informationen zum Testen des REST-Servers finden Sie unter https://www.guru99.com/top-6-api-testing-tool.html.

Was ist Restito?

Restito ist ein von Mkotsur entwickeltes Framework. Es ist eine leichtgewichtige App, mit der Sie jede Art von HTTP-Anfrage ausführen können. Mit Restito können Sie Ihre REST-APIs testen und Probleme in Ihrer Anwendung oder Ihrem Netzwerk suchen.

Wie teste ich den REST-Client mit Restito?

Teilen wir die Übung in die folgenden 4 Schritte ein:

  1. Erstellen Sie einen HTTP-Client und eine HTTP-GET-Methode, um eine HTTP-GET-Anforderung an einen beliebigen Serverendpunkt zu senden. Betrachten Sie den Endpunkt zunächst als http: // localhost: 9092 / getevents.
  1. Starten Sie einen Restito-Server, um die an den Endpunkt 'getevents' in localhost http: // localhost: 9092 / getevents gesendeten Anforderungen abzuhören und zu erfassen.
  1. Erstellen Sie eine Testklasse, um den obigen Client zu testen. Rufen Sie die HTTP-Client-Methode 'sendGETRequest' auf, um eine GET-Anforderung an die API 'getevents' zu initiieren.
  1. Überprüfen Sie den HTTP-GET-Aufruf mithilfe des Restito-Frameworks.

Lassen Sie uns tief in jeden der oben genannten Schritte eintauchen.

Schritt 1) Erstellen Sie einen HTTP-Client und eine Methode zum Senden einer HTTP-GET-Anforderung an einen beliebigen Serverendpunkt.

========== JAVA CODE Startet ===========

Paket com.chamlabs.restfulservices.client;import java.util.HashMap;import java.util.Map;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClientBuilder;import org.json.JSONObject;/ *** Diese Klasse erstellt einen HTTP-Client und verfügt über eine Methode zum Senden einer HTTP-GET-Anforderung:* sendGETRequest (…)* /öffentliche Klasse RestClient {/ *** Konstruktor für die Klasse RestClient* /public RestClient () {System.out.println ("RestClient-Konstruktor erstellen");}}/ *** Methode zum Senden einer GET-Anfrage an http: // localhost: << port >> / getevents* @param Port* @return true, wenn die GET-Anforderung erfolgreich gesendet wurde. Sonst falsch.* /public static boolean sendGETRequest (int port) {Versuchen {HttpClient client = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (Anfrage);client.execute (getRequest);System.out.println ("HTTP-Anfrage wurde erfolgreich gesendet."+ "True zurückgeben");return true;}}catch (Ausnahme e) {e.printStackTrace ();}}System.out.println ("Während der Erstellung des HTTP-Clients ist eine Ausnahme aufgetreten."+ "Falsch zurückgeben");falsch zurückgeben;}}}}

========== JAVA CODE Endet ===========

Schritt 2) Starten Sie einen Restito-Server, um die an den Endpunkt 'getevents' in localhost http: // localhost: 9092 / getevents gesendeten Anforderungen abzuhören und zu erfassen.

========== JAVA CODE Startet ===========

Paket com.chamlabs.restfultesting.util;statische importieren com.xebialabs.restito.builder.stub.StubHttp.whenHttp;statische com.xebialabs.restito.semantics.Action.status importieren;statische com.xebialabs.restito.semantics.Condition.get importieren;statische importieren com.xebialabs.restito.semantics.Condition.post;import java.util.List;import org.glassfish.grizzly.http.util.HttpStatus;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;/ *** Diese Dienstprogrammklasse enthält verschiedene Dienstprogrammmethoden wie:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)* ** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git* ** /öffentliche Klasse TestUtil {/ *** Dienstprogrammmethode zum Starten des Restito-Stub-Servers zum Akzeptieren von GET-Anforderungen* @param Server* @param Port* @param Status* /public static void restartRestitoServerForGETRequests (StubServer-Server, int-Port, HttpStatus-Status){// Töte den Restito Serverif (server! = null) {server.stop ();}}// Eine neuere Instanz des Stub-Servers initialisieren und konfigurierenserver = neuer StubServer (Port) .run ();whenHttp (Server) .match (get ("/ getevents")). then (Status (Status));}}/ *** Dienstprogrammmethode zum Starten des Restito-Stub-Servers zum Akzeptieren von POST-Anforderungen* @param Server* @param Port* @param Status* /public static void restartRestitoServerForPOSTRequests (StubServer-Server, int-Port, HttpStatus-Status){// Töte den Restito Serverif (server! = null) {server.stop ();}}// Eine neuere Instanz des Stub-Servers initialisieren und konfigurierenserver = neuer StubServer (Port) .run ();whenHttp (Server) .match (post ("/ postevents")). then (status (status));}}/ *** Führen Sie für einen bestimmten Restito-Stub-Server eine Schleife für die angegebene Anzahl von Sekunden und aus* Unterbrechen Sie die Anrufliste und geben Sie sie vom Server zurück.* ** @param Server* @param waitTimeInSeconds* @Rückkehr* @throws InterruptedException* /öffentliche statische Liste  waitAndGetCallList (StubServer-Server, int waitTimeInSeconds)löst InterruptedException aus{int timeoutCount = 0;List  callList = server.getCalls ();while (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {brechen;}}callList = server.getCalls ();}}// Warten Sie 2 Sekunden, bis alle Anrufe in callList eingegangen sind, um Unklarheiten zu beseitigen.Thread.sleep (2000);return server.getCalls ();}}}}

========== JAVA CODE Endet ===========

Schritt 3) Erstellen Sie eine Testklasse, um den obigen Client zu testen. Rufen Sie die HTTP-Client-Methode sendGETRequest auf, um eine GET-Anforderung an die API 'getevents' zu initiieren.

========== JAVA CODE Startet ===========

import junit.framework.TestCase;import com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;statische org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202 importieren;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Diese Klasse enthält mehrere Junit-Tests zur Validierung der RestClient-Operationen wie:* Anfrage senden(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)* ** /öffentliche Klasse RestClientTester erweitert TestCase {private static final Integer PORT = 9098;private static final Integer PORT2 = 9099;private static final Integer PORT3 = 9097;public RestClientTester () {System.out.println ("Starten des Tests RestClientTester");}}/ *** Junit-Test zur Validierung der GET-Anforderung von RestClient* Schritte:* 1) Erstellen Sie einen Stub-Server mit dem Restito-Framework und konfigurieren Sie ihn so, dass er den angegebenen Port überwacht* 2) Rufen Sie die sendGETRequest (…) -Methode von RestClient auf* 3) Restito erfasst die übereinstimmenden GET-Anforderungen, die gegebenenfalls gesendet wurden.* 4) Überprüfen Sie, ob Restito GET-Anforderungen auf einem bestimmten Endpunkt erfasst hat* Erwartetes Verhalten:*> Restito sollte eine GET-Anfrage und nur eine GET-Anfrage erfasst haben.* Endlich:*> Stoppen Sie den Stub-Server, der mit restito gestartet wurde.* /public void testGETRequestFromClient () {StubServer Server = null;Versuchen {// Dies startet den Stub-Server auf 'PORT' und antwortet mit HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (Server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);List  callList = TestUtil.waitAndGetCallList (Server, 30);assertTrue ("GET-Anforderung wird nicht vom RestClient empfangen. Test fehlgeschlagen.",(callList! = null) && (callList.size () == 1));}}catch (Ausnahme e) {e.printStackTrace ();fehlgeschlagen ("Test aufgrund einer Ausnahme fehlgeschlagen: + e);}}endlich {if (server! = null) {server.stop ();}}}}}}

========== JAVA CODE Endet ===========

Schritt 4) So validieren Sie die GET-Anforderung mit Headern und die POST-Anforderung mit dem Body mithilfe des Restito-Frameworks.

========== JAVA CODE Startet ===========

/ *** Junit-Test zur Validierung der GET-Anforderung mit Headern von RestClient* Schritte:* 1) Erstellen Sie einen Stub-Server mit dem Restito-Framework und konfigurieren Sie ihn so, dass er den angegebenen Port überwacht* 2) Rufen Sie die sendGETRequestWithCustomHeaders (…) -Methode von RestClient auf* 3) Restito erfasst die übereinstimmenden GET-Anforderungen, die gegebenenfalls gesendet wurden.* 4) Überprüfen Sie, ob Restito GET-Anforderungen auf einem bestimmten Endpunkt erfasst hat* Erwartetes Verhalten:*> Restito sollte eine GET-Anfrage und nur eine GET-Anfrage erfasst haben.*> Ruft die Header der erfassten GET-Anfrage ab* und stellen Sie sicher, dass die Header mit den konfigurierten übereinstimmen.* Endlich:*> Stoppen Sie den Stub-Server, der mit restito gestartet wurde.* /public void testGETRequestWithHeadersFromClient () {StubServer Server = null;Versuchen {// Dies startet den Stub-Server auf 'PORT' und antwortet mit HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (Server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);List  callList = TestUtil.waitAndGetCallList (Server, 30);assertTrue ("GET-Anforderung wird nicht vom RestClient empfangen. Test fehlgeschlagen.",(callList! = null) && (callList.size () == 1));// Überprüfen Sie die Header der GET-Anforderung vom REST-ClientMap > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET-Anforderung enthält den Header Accept und seinen Wert",headersFromRequest.get ("Accept"). enthält ("text / html"));assertTrue ("GET-Anforderung enthält die Header-Autorisierung und ihren Wert",headersFromRequest.get ("Authorization"). enthält ("Bearer 1234567890qwertyuiop"));assertTrue ("GET-Anforderung enthält Header-Cache-Control und seinen Wert",headersFromRequest.get ("Cache-Control"). enthält ("kein Cache"));assertTrue ("GET-Anforderung enthält die Header-Verbindung und ihren Wert",headersFromRequest.get ("Verbindung"). enthält ("Keep-Alive"));assertTrue ("GET-Anforderung enthält den Header-Inhaltstyp und seinen Wert",headersFromRequest.get ("Content-Type"). enthält ("application / json"));}}catch (Ausnahme e) {e.printStackTrace ();fehlgeschlagen ("Test aufgrund einer Ausnahme fehlgeschlagen: + e);}}endlich {if (server! = null) {server.stop ();}}}}}}
/ *** Junit-Test zur Validierung der POST-Anforderung mit Body und Headern von RestClient* Schritte:* 1) Erstellen Sie einen Stub-Server mit dem Restito-Framework und konfigurieren Sie ihn so, dass er den angegebenen Port überwacht* 2) Rufen Sie die sendPOSTRequestWithJSONBody (…) -Methode von RestClient auf* 3) Restito erfasst die übereinstimmenden POST-Anforderungen, die gegebenenfalls gesendet wurden.* 4) Überprüfen Sie, ob Restito POST-Anforderungen auf einem bestimmten Endpunkt erfasst hat* Erwartetes Verhalten:*> Restito sollte die POST-Anfrage erfasst haben und es sollte nur eine POST-Anfrage erfasst haben.*> Ruft den Text der erfassten POST-Anforderung ab und überprüft die JSON-Werte* Endlich:*> Stoppen Sie den Stub-Server, der mit restito gestartet wurde.* /public void testPOSTRequestWithJSONBody () {StubServer Server = null;Versuchen {// Dies startet den Stub-Server auf 'PORT' und antwortet mit HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (Server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);List  callList = TestUtil.waitAndGetCallList (Server, 30);assertTrue ("POST-Anforderung wird nicht vom RestClient empfangen. Test fehlgeschlagen.",(callList! = null) && (callList.size () == 1));// Überprüfen Sie die Header der GET-Anforderung vom REST-ClientString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = neues JSONObject (requestBody);assertTrue ("Die in json aktualisierte Zeit ist falsch",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Das access_token in json ist falsch",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Das refresh_token in json ist falsch",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Der Token-Typ in json ist falsch",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bearer"));assertTrue ("Das expires_in in json ist falsch",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Der Bereich in json ist falsch",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}}catch (Ausnahme e) {e.printStackTrace ();fehlgeschlagen ("Test aufgrund einer Ausnahme fehlgeschlagen: + e);}}endlich {if (server! = null) {server.stop ();}}}}}}}}

========== JAVA CODE Endet ===========

Vorteile der Verwendung von Restito Framework für REST-Client-Tests

Hier finden Sie die Vor- und Nachteile von Restito Framework für ReST-Client-Tests

  • Zum Testen des REST-Clients muss nicht der eigentliche REST-Server entwickelt werden.
  • Restito bietet starke und vielfältige Dienstprogramme und Methoden, um das unterschiedliche Verhalten eines Servers zu verspotten. Beispiel: Um zu testen, wie sich der REST-Client verhält, wenn der Server mit einem HTTP 404-Fehler oder einem HTTP 503-Fehler antwortet.
  • Restito-Server können in wenigen Millisekunden eingerichtet und nach Abschluss der Tests beendet werden.
  • Restito unterstützt alle Arten von Inhalten von HTTP-Methoden wie komprimierte, nicht komprimierte, einheitliche, Anwendung / Text, Anwendung / JSON usw.

Nachteile der Verwendung von Restito Framework für REST-Client-Tests

Hier sind die Vor- und Nachteile von Restito Framework für ReST-Client-Tests

  • Die REST-Clientquelle sollte optimiert werden, um 'localhost' als Server zu betrachten.
  • Das Öffnen des Servers in einem beliebigen Port kann zu Konflikten führen, wenn wir einen häufig verwendeten Port wie '8080' oder '9443' usw. verwenden.
  • Es wird empfohlen, Ports wie 9092 oder 9099 zu verwenden, die von anderen Tools normalerweise nicht verwendet werden.

Zusammenfassung:

  • REST steht für "REpresentational State Transfer", eine neue Standardmethode für die Kommunikation zwischen zwei beliebigen Systemen zu einem bestimmten Zeitpunkt.
  • Der REST-Client ist eine Methode oder ein Tool zum Aufrufen einer REST-Service-API, die der Kommunikation durch ein System oder einen Dienstanbieter ausgesetzt ist.
  • In der RestServer-Methode oder einer API, die für die Kommunikation durch ein System oder einen Dienstanbieter verfügbar gemacht wird.
  • Restito ist eine leichtgewichtige App, mit der Sie jede Art von HTTP-Anfrage ausführen können
  • Erstellen Sie einen HTTP-Client und eine HTTP-GET-Methode, um eine HTTP-GET-Anforderung an einen beliebigen Serverendpunkt zu senden
  • Starten Sie einen Restito-Server, um die an den Endpunkt 'getevents' gesendeten Anforderungen abzuhören und zu erfassen.
  • Starten Sie einen Restito-Server, um die an den Endpunkt 'getevents' in localhost gesendeten Anforderungen abzuhören und zu erfassen
  • Hier haben wir Beispiele für Automatisierungstests nur des REST-Clients implementiert.
  • Zum Testen des REST-Clients muss nicht der eigentliche REST-Server entwickelt werden.
  • Die REST-Clientquelle sollte optimiert werden, um 'localhost' als Server zu betrachten.

Dieser Artikel wurde von Chandrasekhar Muttineni verfasst