REST Client Testing ved hjelp av Restito Tool

Innholdsfortegnelse:

Anonim

Hva er REST?

REST står for "REpresentational State Transfer", som er en ny måte å kommunisere mellom to systemer på et gitt tidspunkt. Ett av systemene heter 'REST Client', og det andre kalles 'REST Server'.

I denne REST-opplæringen lærer du:

  • Hva er REST?
  • Hva er REST Client?
  • Hva er REST Server?
  • Hva er Restito?
  • Hvordan teste REST-klienten ved hjelp av Restito?
  • Fordeler med å bruke Restito Framework til REST-klienttesting
  • Ulemper ved å bruke Restito Framework for REST-klienttesting

Før vi lærer om Restito Framework for REST-klienttesting, la oss først lære noen grunnleggende.

Hva er REST Client?

REST Client er en metode eller et verktøy for å påkalle en REST-tjeneste-API som er eksponert for kommunikasjon av ethvert system eller tjenesteleverandør. For eksempel: hvis en API er utsatt for å få trafikkinformasjon i sanntid om en rute fra Google, kalles programvaren / verktøyet som påkaller Google Traffic API REST-klienten.

Hva er REST Server?

Det er en metode eller et API som er utsatt for kommunikasjon fra ethvert system eller tjenesteleverandør. For eksempel avslører Google en API for å få trafikkinformasjon i sanntid på en gitt rute.

Her må Google-serveren være i gang for å lytte til forespørsler til den eksponerte API-en fra forskjellige klienter.

Eksempel:

Det er på tide å etablere et komplett End-to-End-scenario fra definisjonene ovenfor.

La oss vurdere en taxibestillingssøknad som Uber, et selskap som trenger sanntidsinformasjon om trafikksituasjonen rundt rutene et gitt kjøretøy befinner seg i.

Hvile klient:

Her er klienten et Uber-mobilprogram sjåføren har logget på. Denne appen sender en forespørsel til REST API eksponert av Google maps for å få sanntidsdata. For eksempel En HTTP GET-forespørsel.

Hvile Server:

I dette eksemplet er Google tjenesteleverandøren, og Google maps API svarer med de nødvendige detaljene på Uber-appens forespørsel.

Både klienten og serveren er like viktige i REST-kommunikasjon.

Her har vi implementert eksempler for automatiseringstesting av bare REST-klienten. For testing av REST-server, se https://www.guru99.com/top-6-api-testing-tool.html.

Hva er Restito?

Restito er et rammeverk utviklet av Mkotsur. Det er en lett app som hjelper deg med å utføre alle slags HTTP-forespørsler. Du kan bruke Restito til å teste REST API-ene dine og søke etter problemer i applikasjonen eller nettverket ditt.

Hvordan teste REST-klienten ved hjelp av Restito?

La oss dele oppgaven i følgende fire trinn:

  1. Opprett en HTTP-klient og metode for å sende en HTTP GET-forespørsel til ethvert serverendepunkt. Foreløpig, vurder sluttpunktet som http: // localhost: 9092 / getevents.
  1. Start en Restito-server for å lytte og fange forespørslene som sendes til sluttpunktet 'getevents' i localhost http: // localhost: 9092 / getevents.
  1. Opprett en testklasse for å teste ovennevnte klient. Påkall HTTP-klientens 'sendGETRequest' -metode for å starte en GET-forespørsel til API-getevents.
  1. Valider HTTP GET-samtalen ved hjelp av Restito framework.

La oss dykke inn i hvert av trinnene ovenfor.

Trinn 1) Opprett en HTTP-klient og metode for å sende HTTP GET-forespørsel til ethvert serverendepunkt.

=========== JAVA CODE Starter ============

pakke com.chamlabs.restfulservices.client;importere java.util.HashMap;importere java.util.Map;importer org.apache.http.client.HttpClient;importer org.apache.http.client.methods.HttpGet;importer org.apache.http.client.methods.HttpPost;importer org.apache.http.entity.StringEntity;importer org.apache.http.impl.client.HttpClientBuilder;import org.json.JSONObject;/ *** Denne klassen oppretter en HTTP-klient og har en metode for å sende HTTP GET-forespørsel:* sendGETRequest (…)* /offentlig klasse RestClient {/ *** Konstruktør for klassen RestClient* /offentlig RestClient () {System.out.println ("Opprette RestClient-konstruktør");}/ *** Metode for å sende GET-forespørsel til http: // localhost: <
> / getevents* @param port* @return true hvis GET-forespørsel er sendt. Falske, ellers.* /offentlig statisk boolsk sendGETRequest (int port) {prøv {HttpClient-klient = HttpClientBuilder.create (). Build ();HttpGet getRequest = ny HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse respons = client.execute (forespørsel);client.execute (getRequest);System.out.println ("HTTP-forespørsel sendes."+ "Retur True");returner sant;}fangst (unntak e) {e.printStackTrace ();}System.out.println ("Noen unntak har oppstått under opprettelsen av HTTP-klienten."+ "Returner falsk");returner falsk;}}

========== JAVA CODE Ends ============

Trinn 2) Start en Restito-server for å lytte og fange forespørslene som sendes til sluttpunktet 'getevents' i localhost http: // localhost: 9092 / getevents.

=========== JAVA CODE Starter ============

pakke com.chamlabs.restfultesting.util;importer statisk com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importer statisk com.xebialabs.restito.semantics.Action.status;importer statisk com.xebialabs.restito.semantics.Condition.get;importer statisk com.xebialabs.restito.semantics.Condition.post;importere java.util.List;importer org.glassfish.grizzly.http.util.HttpStatus;importere com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;/ *** Denne verktøyklassen inneholder flere verktøy som:* start RestestServerForGETRequests (…) på nytt* start RestestServerForPOSTRequests (…)* waitAndGetCallList (…)** @forfatter cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /offentlig klasse TestUtil {/ *** Verktøysmetode for å starte restito stub-server for å godta GET-forespørsler* @param server* @param port* @param-status* /offentlig statisk ugyldig omstart RestitoServerForGETRequests (StubServer server, int port, HttpStatus status){// Drep restito-serverenhvis (server! = null) {server.stop ();}// Initialiser og konfigurer en nyere forekomst av stubbserverenserver = ny StubServer (port) .run ();whenHttp (server) .match (get ("/ getevents")). deretter (status (status));}/ *** Verktøymetode for å starte restitub-server for å godta POST-forespørsler* @param server* @param port* @param-status* /offentlig statisk ugyldig omstart RestitoServerForPOSTRequests (StubServer server, int port, HttpStatus status){// Drep restito-serverenhvis (server! = null) {server.stop ();}// Initialiser og konfigurer en nyere forekomst av stubbserverenserver = ny StubServer (port) .run ();nårHttp (server) .match (post ("/ postevents")). deretter (status (status));}/ *** For en gitt restito stub-server, sløyfe for den angitte mengden sekunder og* bryte og returnere anropslisten fra serveren.** @param server* @param ventetidInSekunder* @komme tilbake* @throws InterruptedException* /offentlig statisk liste  waitAndGetCallList (StubServer server, int waitTimeInSeconds)kaster InterruptedException{int timeoutCount = 0;Liste  callList = server.getCalls ();mens (callList.isEmpty ()) {Tråd. Søvn (1000);timeoutCount ++;hvis (timeoutCount> = waitTimeInSeconds) {gå i stykker;}callList = server.getCalls ();}// Vent i 2 sekunder for å få alle samtalene i callList for å eliminere falskhet.Thread.sleep (2000);return server.getCalls ();}}

========== JAVA CODE Ends ============

Trinn 3) Opprett en testklasse for å teste ovennevnte klient. Påkalle HTTP-klienten sendGETRequest-metoden for å starte en GET-forespørsel til API-getevents.

=========== JAVA CODE Starter ============

importere junit.framework.TestCase;importere com.chamlabs.restfulservices.client.RestClient;importere com.chamlabs.restfultesting.util.TestUtil;importere com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;importer statisk org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;importere java.util.List;importere java.util.Map;/ *** Denne klassen inneholder flere junit-tester for å validere RestClient-operasjonene som:* Send forespørsel(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /offentlig klasse RestClientTester utvider TestCase {privat statisk slutt Heltall PORT = 9098;privat statisk slutt Heltal PORT2 = 9099;privat statisk slutt Heltall PORT3 = 9097;offentlig RestClientTester () {System.out.println ("Starter testen RestClientTester");}/ *** Junit-test for å validere GET-forespørselen fra RestClientFremgangsmåte:* 1) Opprett en stubbserver ved hjelp av Restito framework og konfigurer den til å lytte på gitt port* 2) Påkalle sendGETRequest (…) -metoden til RestClient* 3) Restito fanger opp de matchende GET-forespørslene som er sendt, hvis noen.* 4) Bekreft om Restito har registrert GET-forespørsler på gitt endepunkt* Forventet atferd:*> Restito burde ha fanget GET-forespørsel, og den skulle bare ha fanget en GET-forespørsel.* Endelig:*> Stopp stubbserveren som begynte å bruke restito.* /offentlig ugyldig testGETRequestFromClient () {StubServer server = null;prøv {// Dette starter stubbserveren på 'PORT' og svarer med HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Liste  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("GET-forespørsel mottas ikke fra RestClient. Test mislyktes.",(callList! = null) && (callList.size () == 1));}fangst (unntak e) {e.printStackTrace ();fail ("Test mislyktes på grunn av unntak: + e);}endelig {hvis (server! = null) {server.stop ();}}}

========== JAVA CODE Ends ============

Trinn 4) Hvordan validere GET-forespørsel med overskrifter og POST-forespørsel med kroppen ved hjelp av Restito framework.

=========== JAVA CODE Starter ============

/ *** Junit-test for å validere GET-forespørselen med overskrifter fra RestClientFremgangsmåte:* 1) Opprett en stubbserver ved hjelp av Restito framework og konfigurer den til å lytte på gitt port* 2) Påkall sendGETRequestWithCustomHeaders (...) -metoden til RestClient* 3) Restito fanger opp de matchende GET-forespørslene som er sendt, hvis noen.* 4) Bekreft om Restito har registrert GET-forespørsler på et gitt sluttpunkt* Forventet atferd:*> Restito burde ha fanget GET-forespørsel, og den burde bare ha fanget en GET-forespørsel.*> Få overskriftene til den fangede GET-forespørselen* og sørg for at topptekstene samsvarer med de som er konfigurert.* Endelig:*> Stopp stubbserveren som begynte å bruke restito.* /public void testGETRequestWithHeadersFromClient () {StubServer server = null;prøv {// Dette starter stubbserveren på 'PORT' og svarer med HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Liste  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("GET-forespørsel mottas ikke fra RestClient. Test mislyktes.",(callList! = null) && (callList.size () == 1));// Valider overskriftene til GET-forespørselen fra REST ClientKart > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET-forespørsel inneholder overskrift aksepterer og dens verdi",headersFromRequest.get ("Godta"). inneholder ("text / html"));assertTrue ("GET-forespørsel inneholder header Authorization and its value",headersFromRequest.get ("Autorisasjon"). inneholder ("Bearer 1234567890qwertyuiop"));assertTrue ("GET-forespørsel inneholder overskrift Cache-Control og dens verdi",headersFromRequest.get ("Cache-Control") inneholder ("no-cache"));assertTrue ("GET-forespørsel inneholder topptekstforbindelse og dens verdi",headersFromRequest.get ("Connection"). inneholder ("keep-alive");assertTrue ("GET-forespørsel inneholder overskrift Content-Type og dens verdi",headersFromRequest.get ("Content-Type"). inneholder ("application / json"));}fangst (unntak e) {e.printStackTrace ();fail ("Test mislyktes på grunn av unntak: + e);}endelig {hvis (server! = null) {server.stop ();}}}
/ *** Junit-test for å validere POST-forespørselen med kropp og overskrifter fra RestClientFremgangsmåte:* 1) Opprett en stubbserver ved hjelp av Restito framework og konfigurer den til å lytte på gitt port* 2) Påkalle sendPOSTRequestWithJSONBody (…) -metoden til RestClient* 3) Restito fanger opp eventuelle matchende POST-forespørsler som er sendt.* 4) Bekreft om Restito har fanget POST-forespørsler på gitt endepunkt* Forventet atferd:*> Restito burde ha fanget POST-forespørsel, og den skulle bare ha fanget en POST-forespørsel.*> Få kroppen til den fangede POST-forespørselen og valider JSON-verdiene* Endelig:*> Stopp stubbserveren som begynte å bruke restito.* /offentlig ugyldig testPOSTRequestWithJSONBody () {StubServer server = null;prøv {// Dette starter stubbserveren på 'PORT' og svarer med HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Liste  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("POST-forespørsel mottas ikke fra RestClient. Test mislyktes.",(callList! = null) && (callList.size () == 1));// Valider overskriftene til GET-forespørselen fra REST ClientStrengforespørselBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = ny JSONObject (requestBody);assertTrue ("Tiden som er oppdatert i json er feil",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token i json er feil",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8");assertTrue ("Oppdateringstoken i json er feil",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5");assertTrue ("token_type i json er feil",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bærer"));assertTrue ("Utløpsdatoen i json er feil",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Omfanget i json er feil",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}fangst (unntak e) {e.printStackTrace ();fail ("Test mislyktes på grunn av unntak: + e);}endelig {hvis (server! = null) {server.stop ();}}}}

========== JAVA CODE Ends ============

Fordeler med å bruke Restito Framework til REST-klienttesting

Her er fordeler / fordeler med Restito Framework for ReST-klienttesting

  • Vi trenger ikke at den faktiske REST-serveren skal utvikles for å teste REST-klienten.
  • Restito tilbyr sterke og varierte verktøy og metoder for å spotte en annen oppførsel til en server. For eksempel: For å teste hvordan REST-klienten oppfører seg når Server svarer med HTTP 404-feil eller HTTP 503-feil.
  • Restito-servere kan settes opp på få millisekunder og kan avsluttes etter at testene er fullført.
  • Restito støtter alle typer HTTP-metodeinnhold som komprimert, ikke-komprimert, enhetlig, applikasjon / tekst, applikasjon / JSON, etc.

Ulemper ved å bruke Restito Framework for REST-klienttesting

Her er ulemper / ulempe med Restito Framework for ReST-klienttesting

  • REST-klientkilden bør justeres for å betrakte 'localhost' som en servermaskin.
  • Åpning av server i hvilken som helst port kan komme i konflikt hvis vi bruker en vanlig brukt port som '8080' eller '9443' osv.
  • Det anbefales å bruke porter som 9092 eller 9099, som ikke ofte brukes av andre verktøy.

Sammendrag:

  • REST står for "REpresentational State Transfer", som er en ny standard måte å kommunisere mellom to systemer på et gitt tidspunkt.
  • REST Client er en metode eller et verktøy for å påkalle et REST service API som er utsatt for kommunikasjon fra ethvert system eller tjenesteleverandør.
  • I RestServer-metoden eller et API som er eksponert for kommunikasjon av ethvert system eller tjenesteleverandør.
  • Restito er en lettvektsapp som hjelper deg med å utføre alle slags HTTP-forespørsler
  • Opprett en HTTP-klient og metode for å sende en HTTP GET-forespørsel til ethvert serverendepunkt
  • Start en Restito-server for å lytte og fange forespørslene som sendes til sluttpunktet 'getevents'.
  • Start en Restito-server for å lytte og fange forespørslene som sendes til endepunktet 'getevents' i localhost
  • Her har vi implementert eksempler for automatiseringstesting av bare REST-klienten.
  • Vi trenger ikke at den faktiske REST-serveren skal utvikles for å teste REST-klienten.
  • REST-klientkilden bør justeres for å betrakte 'localhost' som en servermaskin.

Denne artikkelen er bidratt av Chandrasekhar Muttineni