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:
- 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.
- Start en Restito-server for å lytte og fange forespørslene som sendes til sluttpunktet 'getevents' i localhost http: // localhost: 9092 / getevents.
- Opprett en testklasse for å teste ovennevnte klient. Påkall HTTP-klientens 'sendGETRequest' -metode for å starte en GET-forespørsel til API-getevents.
- 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 listewaitAndGetCallList (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);ListecallList = 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);ListecallList = 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);ListecallList = 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