Hvad er REST?
REST står for "REpresentational State Transfer", som er en ny måde at kommunikere mellem to systemer på et givet tidspunkt. Et af systemerne hedder 'REST Client', og det andet kaldes 'REST Server'.
I denne REST-tutorial lærer du:
- Hvad er REST?
- Hvad er REST Client?
- Hvad er REST Server?
- Hvad er Restito?
- Hvordan testes REST-klient ved hjælp af Restito?
- Fordele ved at bruge Restito Framework til REST-klienttest
- Ulemper ved at bruge Restito Framework til REST-klienttest
Før vi lærer om Restito Framework til REST-klienttest, skal vi først lære et par grundlæggende.
Hvad er REST Client?
REST Client er en metode eller et værktøj til at påkalde en REST service API, der er eksponeret for kommunikation af ethvert system eller tjenesteudbyder. For eksempel: hvis en API udsættes for at få trafikoplysninger i realtid om en rute fra Google, kaldes softwaren / værktøjet, der påberåber sig Google trafik-API'et, REST-klienten.
Hvad er REST Server?
Det er en metode eller en API, der udsættes for kommunikation af enhver system- eller tjenesteudbyder. For eksempel udsætter Google en API for at få trafikoplysninger i realtid på en given rute.
Her skal Google-serveren være i gang for at lytte til eventuelle anmodninger til den eksponerede API fra forskellige klienter.
Eksempel:
Det er på tide at etablere et komplet End-to-End-scenario ud fra ovenstående definitioner.
Lad os overveje en ansøgning om taxa-booking som Uber, da et firma har brug for information i realtid om trafiksituationen omkring de ruter, et bestemt køretøj befinder sig i.
Hvil klient:
Her er klienten en Uber-mobilapplikation, som driveren har logget på. Denne app sender en anmodning til REST API eksponeret af Google maps for at få realtidsdata. For eksempel En HTTP GET-anmodning.
Hvile Server:
I dette eksempel er Google tjenesteudbyderen, og Google maps 'API svarer med de krævede detaljer til Uber-appens anmodning.
Både klienten og serveren er lige så vigtige i REST-kommunikation.
Her har vi implementeret eksempler til automatiseringstest af kun REST-klienten. For at teste REST-server, se https://www.guru99.com/top-6-api-testing-tool.html.
Hvad er Restito?
Restito er en ramme udviklet af Mkotsur. Det er en letvægtsapp, der hjælper dig med at udføre enhver form for HTTP-anmodning. Du kan bruge Restito til at teste dine REST API'er og søge problemer i din applikation eller dit netværk.
Hvordan testes REST-klient ved hjælp af Restito?
Lad os opdele øvelsen i følgende 4 trin:
- Opret en HTTP-klient og metode til at sende en HTTP GET-anmodning til ethvert serverendepunkt. Overvej indtil videre slutpunktet at være http: // localhost: 9092 / getevents.
- Start en Restito-server for at lytte og fange de anmodninger, der sendes til slutpunktet 'getevents' i localhost http: // localhost: 9092 / getevents.
- Opret en testklasse for at teste ovenstående klient. Påkald HTTP-klientens 'sendGETRequest'-metode for at starte en GET-anmodning til API'ets' getevents '.
- Valider HTTP GET-opkaldet ved hjælp af Restito framework.
Lad os dybe dybt ned i hvert af ovenstående trin.
Trin 1) Opret en HTTP-klient og metode til at sende HTTP GET-anmodning til ethvert serverendepunkt.
========== JAVA CODE Starter ============
pakke com.chamlabs.restfulservices.client;importere java.util.HashMap;importere 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;/ *** Denne klasse opretter en HTTP-klient og har en metode til at sende HTTP GET-anmodning:* sendGETRequest (…)* /offentlig klasse RestClient {/ *** Konstruktør til klassen RestClient* /offentlig RestClient () {System.out.println ("Oprettelse af RestClient-konstruktør");}/ *** Metode til at sende GET-anmodning til http: // localhost: <> / getevents* @param port* @return sand hvis GET-anmodning er sendt. Falsk, ellers.* /offentlig statisk boolsk sendGETRequest (int port) {prøve {HttpClient-klient = HttpClientBuilder.create (). Build ();HttpGet getRequest = ny HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse respons = client.execute (anmodning);client.execute (getRequest);System.out.println ("HTTP-anmodning sendes med succes."+ "Vender tilbage sandt");returner sandt}fangst (undtagelse e) {e.printStackTrace ();}System.out.println ("Der er sket en undtagelse under oprettelsen af HTTP-klient."+ "Returnering falsk");returner falsk;}}
=========== JAVA-KODE Slutter ============
Trin 2) Start en Restito-server for at lytte og fange de anmodninger, der sendes til slutpunktet '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;import org.glassfish.grizzly.http.util.HttpStatus;import com.xebialabs.restito.semantics.Call;importer com.xebialabs.restito.server.StubServer;/ *** Denne hjælpeklasse indeholder flere hjælpemetoder som:* genstart RestoServerForGETRequests (…)* genstart RestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @forfatter cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /offentlig klasse TestUtil {/ *** Utility-metode til at starte restito stub-server til at acceptere GET-anmodninger* @param-server* @param port* @param-status* /offentlig statisk ugyldig genstart RestoServerForGETRequests (StubServer-server, int-port, HttpStatus-status){// Dræb restito-serverenhvis (server! = null) {server.stop ();}// Initialiser og konfigurer en nyere forekomst af stubserverenserver = ny StubServer (port) .run ();whenHttp (server) .match (get ("/ getevents")). derefter (status (status));}/ *** Utility-metode til at starte restito stub-server til at acceptere POST-anmodninger* @param-server* @param port* @param-status* /offentlig statisk ugyldig genstart RestoServerForPOSTRequests (StubServer-server, int-port, HttpStatus-status){// Dræb restito-serverenhvis (server! = null) {server.stop ();}// Initialiser og konfigurer en nyere forekomst af stubserverenserver = ny StubServer (port) .run ();whenHttp (server) .match (post ("/ postevents")). derefter (status (status));}/ *** For en given restito-stubserver skal du sløjfe for det givne antal sekunder og* bryde og returnere opkaldslisten fra serveren.** @param-server* @param ventetidInSekunder* @Vend tilbage* @ kaster 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> = ventetidInSekunder) {pause;}callList = server.getCalls ();}// Vent i 2 sekunder for at få alle opkald til callList for at eliminere enhver falskhed.Thread.sleep (2000);returner server.getCalls ();}}
=========== JAVA-KODE Slutter ============
Trin 3) Opret en testklasse for at teste ovenstående klient. Påkald HTTP-klienten sendGETRequest-metoden for at starte en GET-anmodning til API'et 'getevents'.
========== JAVA CODE Starter ============
importere junit.framework.TestCase;import com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;import com.xebialabs.restito.semantics.Call;importer 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 klasse indeholder flere junit-tests for at validere RestClient-operationer som:* Send anmodning(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /offentlig klasse RestClientTester udvider TestCase {privat statisk endelig Heltal PORT = 9098;privat statisk endelig Heltal PORT2 = 9099;privat statisk endelig Heltal PORT3 = 9097;offentlig RestClientTester () {System.out.println ("Start test RestClientTester");}/ *** Junit-test for at validere GET-anmodningen fra RestClient* Trin:* 1) Opret en stubserver ved hjælp af Restito framework og konfigurer den til at lytte i en given port* 2) Påkald metoden sendGETRequest (…) i RestClient* 3) Restito registrerer de matchende GET-anmodninger, der er sendt, hvis der er nogen.* 4) Bekræft, hvis Restito har fanget GET-anmodninger på det givne slutpunkt* Forventet adfærd:*> Restito skulle have fanget GET-anmodning, og den skulle kun have fanget en GET-anmodning.* Langt om længe:*> Stop stoppeserveren begyndte at bruge restito.* /offentlig ugyldig testGETRequestFromClient () {StubServer server = null;prøve {// Dette starter stubserveren 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-anmodning modtages ikke fra RestClient. Test mislykkedes.",(callList! = null) && (callList.size () == 1));}fangst (undtagelse e) {e.printStackTrace ();fail ("Test mislykkedes på grund af undtagelse: + e);}langt om længe {hvis (server! = null) {server.stop ();}}}
=========== JAVA-KODE Slutter ============
Trin 4) Sådan valideres GET-anmodning med headere og POST-anmodning med kroppen ved hjælp af Restito framework.
========== JAVA CODE Starter ============
/ *** Junit-test for at validere GET-anmodningen med overskrifter fra RestClient* Trin:* 1) Opret en stubserver ved hjælp af Restito framework og konfigurer den til at lytte i en given port* 2) Påkald metoden SendGETRequestWithCustomHeaders (…) til RestClient* 3) Restito registrerer de matchende GET-anmodninger, der er sendt, hvis der er nogen.* 4) Valider, hvis Restito har fanget GET-anmodninger på et givet slutpunkt* Forventet adfærd:*> Restito skulle have fanget GET-anmodning, og den skulle kun have fanget en GET-anmodning.*> Få overskrifterne på den fangede GET-anmodning* og sørg for, at overskrifterne matcher dem, der er konfigureret.* Langt om længe:*> Stop stoppeserveren begyndte at bruge restito.* /offentlig ugyldig testGETRequestWithHeadersFromClient () {StubServer server = null;prøve {// Dette starter stubserveren 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-anmodning modtages ikke fra RestClient. Test mislykkedes.",(callList! = null) && (callList.size () == 1));// Valider overskrifterne af GET-anmodningen fra REST ClientKort > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET-anmodning indeholder header Accept og dens værdi",headersFromRequest.get ("Accept"). indeholder ("text / html"));assertTrue ("GET-anmodning indeholder header-autorisation og dens værdi",headersFromRequest.get ("Authorization"). indeholder ("Bearer 1234567890qwertyuiop"));assertTrue ("GET-anmodning indeholder header Cache-Control og dens værdi",headersFromRequest.get ("Cache-Control"). indeholder ("no-cache");assertTrue ("GET-anmodning indeholder headerforbindelse og dens værdi",headersFromRequest.get ("Forbindelse"). indeholder ("hold i live"));assertTrue ("GET-anmodning indeholder overskrift Content-Type og dens værdi",headersFromRequest.get ("Content-Type"). indeholder ("application / json"));}fangst (undtagelse e) {e.printStackTrace ();fail ("Test mislykkedes på grund af undtagelse: + e);}langt om længe {hvis (server! = null) {server.stop ();}}}
/ *** Junit-test for at validere POST-anmodningen med body og headere fra RestClient* Trin:* 1) Opret en stubserver ved hjælp af Restito framework og konfigurer den til at lytte i en given port* 2) Påkald metoden SendPOSTRequestWithJSONBody (…) i RestClient* 3) Restito registrerer de matchende POST-anmodninger, der er sendt, hvis der er nogen.* 4) Bekræft, hvis Restito har fanget POST-anmodninger på det givne slutpunkt* Forventet adfærd:*> Restito skulle have fanget POST-anmodning, og den skulle kun have fanget en POST-anmodning.*> Hent kroppen af den fangede POST-anmodning, og valider JSON-værdierne* Langt om længe:*> Stop stoppeserveren begyndte at bruge restito.* /offentlig ugyldig testPOSTRequestWithJSONBody () {StubServer server = null;prøve {// Dette starter stubserveren 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-anmodning modtages ikke fra RestClient. Test mislykkedes.",(callList! = null) && (callList.size () == 1));// Valider overskrifterne af GET-anmodningen fra REST ClientString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = nyt JSONObject (requestBody);assertTrue ("TimeUpdated i json er forkert",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token i json er forkert",postRequestJSON.get ("access_token"). toString ().er lig med IgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8");assertTrue ("Opdater_token i json er forkert",postRequestJSON.get ("refresh_token"). toString ().er lig med IgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5");assertTrue ("token_type i json er forkert",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bærer"));assertTrue ("Udløbsdatoen i json er forkert",postRequestJSON.get ("udløber_in"). toString (). er lig medIgnoreCase ("1024"));assertTrue ("Omfanget i json er forkert",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}fangst (undtagelse e) {e.printStackTrace ();fail ("Test mislykkedes på grund af undtagelse: + e);}langt om længe {hvis (server! = null) {server.stop ();}}}}
=========== JAVA-KODE Slutter ============
Fordele ved at bruge Restito Framework til REST-klienttest
Her er fordele / fordele ved Restito Framework til ReST-klienttest
- Vi har ikke brug for at udvikle den egentlige REST-server til at teste REST-klienten.
- Restito tilbyder stærke og varierede hjælpeprogrammer og metoder til at spotte en adfærd for en server. For eksempel: At teste, hvordan REST-klienten opfører sig, når Server reagerer med HTTP 404-fejl eller HTTP 503-fejl.
- Restito-servere kan oprettes på få millisekunder og kan afsluttes, når testene er afsluttet.
- Restito understøtter alle typer HTTP-metodeindhold som komprimeret, ikke-komprimeret, samlet, applikation / tekst, applikation / JSON osv.
Ulemper ved at bruge Restito Framework til REST-klienttest
Her er ulemper / ulempe ved Restito Framework til ReST-klienttest
- REST-klientkilden skal finjusteres for at betragte 'localhost' som en servermaskine.
- Åbning af server i enhver port kan være i konflikt, hvis vi bruger en almindeligt anvendt port som '8080' eller '9443' osv.
- Det tilrådes at bruge porte som 9092 eller 9099, som ikke ofte bruges af andre værktøjer.
Resumé:
- REST står for "REpresentational State Transfer", som er en ny standard måde at kommunikere mellem to systemer på et givet tidspunkt.
- REST Client er en metode eller et værktøj til at påkalde en REST service API, der er udsat for kommunikation af ethvert system eller tjenesteudbyder.
- I RestServer-metoden eller en API, der er udsat for kommunikation af ethvert system eller en tjenesteudbyder.
- Restito er en letvægtsapp, der hjælper dig med at udføre enhver form for HTTP-anmodning
- Opret en HTTP-klient og metode til at sende en HTTP GET-anmodning til ethvert serverendepunkt
- Start en Restito-server for at lytte og fange de anmodninger, der sendes til slutpunktet 'getevents.'
- Start en Restito-server for at lytte og fange de anmodninger, der sendes til slutpunktet 'getevents' i localhost
- Her har vi implementeret eksempler til automatiseringstest af kun REST-klienten.
- Vi har ikke brug for at udvikle den egentlige REST-server til at teste REST-klienten.
- REST-klientkilden skal finjusteres for at betragte 'localhost' som en servermaskine.
Denne artikel er bidraget af Chandrasekhar Muttineni