REST Client Testing med Restito Tool

Innehållsförteckning:

Anonim

Vad är REST?

REST står för "REpresentational State Transfer", vilket är ett nytt sätt att kommunicera mellan två system vid en given tidpunkt. Ett av systemen heter 'REST Client' och det andra heter 'REST Server'.

I denna REST-handledning lär du dig:

  • Vad är REST?
  • Vad är REST Client?
  • Vad är REST Server?
  • Vad är Restito?
  • Hur testar jag REST-klienten med Restito?
  • Fördelar med att använda Restito Framework för REST-klienttestning
  • Nackdelar med att använda Restito Framework för REST-klienttestning

Innan vi lär oss om Restito Framework för REST-klienttestning, låt oss först lära oss några grunder.

Vad är REST Client?

REST Client är en metod eller ett verktyg för att anropa ett REST-tjänst-API som exponeras för kommunikation av alla system eller tjänsteleverantörer. Till exempel: om ett API exponeras för att få trafikinformation i realtid om en rutt från Google, kallas programvaran / verktyget som åberopar Googles trafik-API REST-klienten.

Vad är REST Server?

Det är en metod eller ett API som exponeras för kommunikation av alla system- eller tjänsteleverantörer. Till exempel exponerar Google ett API för att få trafikinformation i realtid på en given rutt.

Här måste Googles server vara igång för att lyssna på alla förfrågningar till det exponerade API: et från olika klienter.

Exempel:

Det är dags att skapa ett fullständigt End-to-End-scenario från ovanstående definitioner.

Låt oss överväga en taxibokningsapplikation som Uber eftersom ett företag behöver information i realtid om trafiksituationen runt de rutter som ett visst fordon finns i.

Restklient:

Här är klienten en Uber-mobilapp som drivrutinen har loggat in på. Den här appen skickar en begäran till REST API som exponeras av Google maps för att få realtidsdata. Till exempel En HTTP GET-begäran.

Rest Server:

I det här exemplet är Google tjänsteleverantör, och Google maps API svarar med nödvändiga detaljer på Uber-appens begäran.

Både klienten och servern är lika viktiga i REST-kommunikation.

Här har vi implementerat exempel för automatiseringstestning av endast REST-klienten. För att testa REST-servern, se https://www.guru99.com/top-6-api-testing-tool.html.

Vad är Restito?

Restito är ett ramverk utvecklat av Mkotsur. Det är en lätt app som hjälper dig att utföra alla typer av HTTP-förfrågningar. Du kan använda Restito för att testa dina REST API: er och för att söka problem i din applikation eller ditt nätverk.

Hur testar jag REST-klienten med Restito?

Låt oss dela upp övningen i följande fyra steg:

  1. Skapa en HTTP-klient och metod för att skicka en HTTP GET-förfrågan till vilken serverändpunkt som helst. För närvarande, betrakta slutpunkten som http: // localhost: 9092 / getevents.
  1. Starta en Restito-server för att lyssna och fånga de förfrågningar som skickas till slutpunkten 'getevents' i localhost http: // localhost: 9092 / getevents.
  1. Skapa en testklass för att testa ovanstående klient. Anropa HTTP-klientens "sendGETRequest" -metod för att initiera en GET-begäran till API: s "getevents".
  1. Validera HTTP GET-samtalet med Restito framework.

Låt oss djupt dyka in i vart och ett av ovanstående steg.

Steg 1) Skapa en HTTP-klient och metod för att skicka HTTP GET-förfrågan till vilken serverändpunkt som helst.

========== JAVA CODE börjar ============

paketet com.chamlabs.restfulservices.client;importera java.util.HashMap;importera java.util.Map;importera org.apache.http.client.HttpClient;importera org.apache.http.client.methods.HttpGet;importera org.apache.http.client.methods.HttpPost;importera org.apache.http.entity.StringEntity;importera org.apache.http.impl.client.HttpClientBuilder;importera org.json.JSONObject;/ *** Denna klass skapar en HTTP-klient och har en metod för att skicka HTTP GET-begäran:* sendGETRequest (…)* /allmän klass RestClient {/ *** Konstruktör för klassen RestClient* /allmän RestClient () {System.out.println ("Skapa RestClient-konstruktör");}/ *** Metod för att skicka GET-begäran till http: // localhost: <
> / getevents* @param hamn* @return true om GET-begäran skickas. Falskt, annars.* /public static boolean sendGETRequest (int port) {Prova {HttpClient-klient = HttpClientBuilder.create (). Build ();HttpGet getRequest = ny HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (begäran);client.execute (getRequest);System.out.println ("HTTP-begäran skickas framgångsrikt."+ "Returning True");återvänd sant;}fångst (undantag e) {e.printStackTrace ();}System.out.println ("Något undantag har inträffat under skapandet av HTTP-klient."+ "Returnerar falskt");returnera falsk;}}

=========== JAVA CODE slutar ============

Steg 2) Starta en Restito-server för att lyssna och fånga de förfrågningar som skickas till slutpunkten 'getevents' i localhost http: // localhost: 9092 / getevents.

========== JAVA CODE börjar ============

paketet com.chamlabs.restfultesting.util;importera statisk com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importera statisk com.xebialabs.restito.semantics.Action.status;importera statisk com.xebialabs.restito.semantics.Condition.get;importera statisk com.xebialabs.restito.semantics.Condition.post;importera java.util.List;importera org.glassfish.grizzly.http.util.HttpStatus;importera com.xebialabs.restito.semantics.Call;importera com.xebialabs.restito.server.StubServer;/ *** Denna verktygsklass innehåller flera verktygsmetoder som:* starta om RestitoServerForGETRequests (…)* starta om RestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @författare cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /offentlig klass TestUtil {/ *** Verktygsmetod för att starta restitub-server för att acceptera GET-förfrågningar* @param-server* @param hamn* @param-status* /public static void restartRestitoServerForGETRequests (StubServer server, int port, HttpStatus status){// Döda restitoservernom (server! = null) {server.stop ();}// Initiera och konfigurera en nyare instans av stubbservernserver = ny StubServer (port) .run ();whenHttp (server) .match (get ("/ getevents")). sedan (status (status));}/ *** Verktygsmetod för att starta restito stub-servern för att acceptera POST-förfrågningar* @param-server* @param hamn* @param-status* /public static void restartRestitoServerForPOSTRequests (StubServer server, int port, HttpStatus status){// Döda restitoservernom (server! = null) {server.stop ();}// Initiera och konfigurera en nyare instans av stubbservernserver = ny StubServer (port) .run ();närHttp (server) .match (post ("/ postevents")). sedan (status (status));}/ *** För en viss restitustubbserver, slinga för den angivna mängden sekunder och* bryta och returnera samtalslistan från servern.** @param-server* @param waitTimeInSeconds* @lämna tillbaka* @throws InterruptedException* /offentlig statisk lista  waitAndGetCallList (StubServer-server, int waitTimeInSeconds)kastar InterruptedException{int timeoutCount = 0;Lista  callList = server.getCalls ();medan (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {ha sönder;}callList = server.getCalls ();}// Vänta i 2 sekunder för att få alla samtal i callList för att eliminera falkyness.Thread.sleep (2000);returnera server.getCalls ();}}

=========== JAVA CODE slutar ============

Steg 3) Skapa en testklass för att testa ovanstående klient. Anropa HTTP-klientens sendGETRequest-metod för att initiera en GET-begäran till API: s 'getevents'.

========== JAVA CODE börjar ============

importera junit.framework.TestCase;importera com.chamlabs.restfulservices.client.RestClient;importera com.chamlabs.restfultesting.util.TestUtil;importera com.xebialabs.restito.semantics.Call;importera com.xebialabs.restito.server.StubServer;importera statisk org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;importera org.json.JSONObject;importera java.util.List;importera java.util.Map;/ *** Den här klassen innehåller flera test för att bekräfta RestClient-operationerna som:* skicka förfrågan(… )* sendRequestWithCustomHeaders (...)* sendPOSTRequestWithJSONBody (…)** /allmän klass RestClientTester utökar TestCase {privat statisk slutlig Heltal PORT = 9098;privat statisk slutlig Heltal PORT2 = 9099;privat statisk slutlig Heltal PORT3 = 9097;offentlig RestClientTester () {System.out.println ("Starta testet RestClientTester");}/ *** Junit-test för att validera GET-begäran från RestClient* Steg:* 1) Skapa en stubbserver med Restito framework och konfigurera den för att lyssna på en viss port* 2) Anropa sendGETRequest (...) -metoden för RestClient* 3) Restito fångar matchande GET-förfrågningar som skickas, om sådana finns.* 4) Validera om Restito har fångat upp några GET-förfrågningar på en given slutpunkt* Förväntat beteende:*> Restito borde ha tagit GET-begäran och den borde ha tagit endast en GET-begäran.* Till sist:*> Stoppa stubbservern började använda restito.* /offentligt ogiltigt testGETRequestFromClient () {StubServer-server = null;Prova {// Detta startar stubbservern på 'PORT' och svarar med HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Lista  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("GET-begäran tas inte emot från RestClient. Test misslyckades.",(callList! = null) && (callList.size () == 1));}fångst (undantag e) {e.printStackTrace ();fail ("Test misslyckades på grund av undantag: + e);}till sist {om (server! = null) {server.stop ();}}}

=========== JAVA CODE slutar ============

Steg 4) Hur man validerar GET-begäran med rubriker och POST-begäran med kroppen med hjälp av Restito-ramverket.

========== JAVA CODE börjar ============

/ *** Junit-test för att validera GET-begäran med rubriker från RestClient* Steg:* 1) Skapa en stubbserver med Restito framework och konfigurera den för att lyssna på en viss port* 2) Anropa sendGETRequestWithCustomHeaders (...) -metoden för RestClient* 3) Restito fångar matchande GET-förfrågningar som skickas, om sådana finns.* 4) Verifiera om Restito har fångat upp några GET-förfrågningar på en given slutpunkt* Förväntat beteende:*> Restito borde ha tagit in GET-begäran, och den borde ha tagit endast en GET-begäran.*> Hämta rubrikerna för den fångade GET-begäran* och se till att rubrikerna matchar de som har konfigurerats.* Till sist:*> Stoppa stubbservern började använda restito.* /public void testGETRequestWithHeadersFromClient () {StubServer-server = null;Prova {// Detta startar stubbservern på 'PORT' och svarar med HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Lista  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("GET-begäran tas inte emot från RestClient. Test misslyckades.",(callList! = null) && (callList.size () == 1));// Validera rubrikerna för GET-begäran från REST ClientKarta > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET-begäran innehåller rubriken Acceptera och dess värde",headersFromRequest.get ("Acceptera"). innehåller ("text / html"));assertTrue ("GET-förfrågan innehåller rubrikbehörighet och dess värde",headersFromRequest.get ("Authorization"). innehåller ("Bearer 1234567890qwertyuiop"));assertTrue ("GET-begäran innehåller rubrik Cache-Control och dess värde",headersFromRequest.get ("Cache-Control"). innehåller ("no-cache"));assertTrue ("GET-begäran innehåller rubrikanslutning och dess värde",headersFromRequest.get ("Connection"). innehåller ("keep-alive"));assertTrue ("GET-begäran innehåller rubriken Content-Type och dess värde",headersFromRequest.get ("Content-Type"). innehåller ("application / json"));}fångst (undantag e) {e.printStackTrace ();fail ("Test misslyckades på grund av undantag: + e);}till sist {om (server! = null) {server.stop ();}}}
/ *** Junit-test för att validera POST-begäran med body och headers från RestClient* Steg:* 1) Skapa en stubbserver med Restito framework och konfigurera den för att lyssna på en viss port* 2) Åkalla metoden sendPOSTRequestWithJSONBody (…) för RestClient* 3) Restito fångar matchande POST-förfrågningar som skickas, om sådana finns.* 4) Validera om Restito har tagit några POST-förfrågningar på en given slutpunkt* Förväntat beteende:*> Restito borde ha fångat POST-begäran och den borde ha tagit endast en POST-begäran.*> Hämta kroppen för den fångade POST-begäran och validera JSON-värdena* Till sist:*> Stoppa stubbservern började använda restito.* /offentligt ogiltigt testPOSTRequestWithJSONBody () {StubServer-server = null;Prova {// Detta startar stubbservern på 'PORT' och svarar med HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Lista  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("POST-begäran mottas inte från RestClient. Test misslyckades.",(callList! = null) && (callList.size () == 1));// Validera rubrikerna för GET-begäran från REST ClientString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = nytt JSONObject (requestBody);assertTrue ("The TimeUpdated in json is incorrect",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token i json är felaktig",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8");assertTrue ("Uppdateringstoken i json är felaktig",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("token_type i json är felaktig",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bärare"));assertTrue ("Expires_in i json är felaktig",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Omfattningen i json är felaktig",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}fångst (undantag e) {e.printStackTrace ();fail ("Test misslyckades på grund av undantag: + e);}till sist {om (server! = null) {server.stop ();}}}}

=========== JAVA CODE slutar ============

Fördelar med att använda Restito Framework för REST-klienttestning

Här är fördelar / fördelar med Restito Framework för ReST-klienttestning

  • Vi behöver inte utveckla den verkliga REST-servern för att testa REST-klienten.
  • Restito tillhandahåller starka och varierade verktyg och metoder för att håna olika beteenden hos en server. Till exempel: För att testa hur REST-klienten beter sig när servern svarar med HTTP 404-fel eller HTTP 503-fel.
  • Restitoservrar kan ställas in på några millisekunder och kan avslutas när testerna har slutförts.
  • Restito stöder alla typer av HTTP-metodinnehåll som komprimerad, icke-komprimerad, enhetlig, applikation / text, applikation / JSON, etc.

Nackdelar med att använda Restito Framework för REST-klienttestning

Här är nackdelar / nackdelar med Restito Framework för ReST-klienttestning

  • REST-klientkällan bör justeras för att betrakta "localhost" som en servermaskin.
  • Öppning av server i valfri port kan komma i konflikt om vi använder någon vanligt använd port som '8080' eller '9443' etc.
  • Det rekommenderas att använda portar som 9092 eller 9099, som inte ofta används av andra verktyg.

Sammanfattning:

  • REST står för "REpresentational State Transfer" som är ett nytt standardiserat sätt att kommunicera mellan två system vid en given tidpunkt.
  • REST Client är en metod eller ett verktyg för att åberopa ett REST-tjänste-API som exponeras för kommunikation av alla system eller tjänsteleverantörer.
  • I RestServer-metoden eller ett API som exponeras för kommunikation av alla system- eller tjänsteleverantörer.
  • Restito är en lätt app som hjälper dig att utföra alla typer av HTTP-förfrågningar
  • Skapa en HTTP-klient och metod för att skicka en HTTP GET-förfrågan till valfri serverslutpunkt
  • Starta en Restito-server för att lyssna och fånga de förfrågningar som skickas till slutpunkten 'getevents'.
  • Starta en Restito-server för att lyssna och fånga de förfrågningar som skickas till slutpunkten 'getevents' i localhost
  • Här har vi implementerat exempel för automatiseringstestning av endast REST-klienten.
  • Vi behöver inte utveckla den verkliga REST-servern för att testa REST-klienten.
  • REST-klientkällan bör justeras för att betrakta "localhost" som en servermaskin.

Denna artikel har bidragit av Chandrasekhar Muttineni