REST klijentsko testiranje pomoću alata Restito

Sadržaj:

Anonim

Što je OSTALO?

REST je skraćenica od "Representational State Transfer", što je novi način komunikacije između bilo koja dva sustava u određenom trenutku. Jedan od sustava naziva se 'REST klijent', a drugi se zove 'REST poslužitelj'.

U ovom vodiču za REST naučit ćete:

  • Što je OSTALO?
  • Što je REST klijent?
  • Što je REST poslužitelj?
  • Što je Restito?
  • Kako testirati REST klijenta pomoću Restita?
  • Prednosti upotrebe Restito Framework-a za testiranje klijenta REST
  • Mane upotrebe Restito Framework-a za testiranje klijenta REST

Prije učenja o Restito Framework-u za REST testiranje klijenta, prvo naučimo nekoliko osnova.

Što je REST klijent?

REST klijent je metoda ili alat za pozivanje API-ja usluge REST koji je izložen za komunikaciju bilo kojim sustavom ili davateljem usluga. Na primjer: ako je API izložen da bi od Googlea dobivao informacije o prometu u stvarnom vremenu o ruti, softver / alat koji poziva Google API za promet naziva se REST klijent.

Što je REST poslužitelj?

To je metoda ili API koji je izložen komunikaciji bilo kojeg sustava ili davatelja usluga. Na primjer, Google izlaže API za dobivanje podataka o prometu u stvarnom vremenu na određenoj ruti.

Ovdje Googleov poslužitelj mora biti pokrenut kako bi slušao sve zahtjeve za izloženi API različitih klijenata.

Primjer:

Vrijeme je da se iz gornjih definicija uspostavi cjelovit scenarij od kraja do kraja.

Razmotrimo aplikacije za rezervaciju taksija poput Ubera jer tvrtka treba informacije u stvarnom vremenu o stanju u prometu oko ruta na kojima se nalazi određeno vozilo.

Ostali klijent:

Ovdje je klijent Uberova mobilna aplikacija na koju se vozač prijavio. Ova aplikacija šalje zahtjev REST API-ju izloženom na Google mapama za dobivanje podataka u stvarnom vremenu. Na primjer, HTTP GET zahtjev.

Poslužitelj za odmor:

U ovom primjeru Google je davatelj usluga, a API Google mapsa odgovara potrebnim detaljima na zahtjev aplikacije Uber.

I klijent i poslužitelj jednako su važni u REST komunikaciji.

Ovdje smo implementirali primjere za automatsko testiranje samo REST klijenta. Za testiranje REST poslužitelja pogledajte https://www.guru99.com/top-6-api-testing-tool.html.

Što je Restito?

Restito je okvir koji je razvio Mkotsur. Lagana je aplikacija koja će vam pomoći da izvršite bilo koju vrstu HTTP zahtjeva. Restito možete koristiti za testiranje REST API-ja i za pretraživanje problema u vašoj aplikaciji ili mreži.

Kako testirati REST klijenta pomoću Restita?

Podijelimo vježbu u sljedeća 4 koraka:

  1. Stvorite HTTP klijent i metodu za slanje HTTP GET zahtjeva na bilo koju krajnju točku poslužitelja. Za sada uzmite u obzir krajnju točku http: // localhost: 9092 / getevents.
  1. Pokrenite Restito poslužitelj za preslušavanje i hvatanje zahtjeva poslanih krajnjoj točki 'getevents' u localhost http: // localhost: 9092 / getevents.
  1. Stvorite test klasu za testiranje gore navedenog klijenta. Pozovite metodu HTTP klijenta 'sendGETRequest' da biste pokrenuli GET zahtjev za API 'getevents'.
  1. Potvrdite HTTP GET poziv koristeći Restito framework.

Zaronimo duboko u svaki od gore navedenih koraka.

Korak 1) Stvorite HTTP klijent i metodu za slanje HTTP GET zahtjeva na bilo koju krajnju točku poslužitelja.

========== JAVA CODE započinje ===========

paket com.chamlabs.restfulservices.client;uvoz java.util.HashMap;uvoz java.util.Map;uvoz 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;uvoz org.apache.http.impl.client.HttpClientBuilder;import org.json.JSONObject;/ *** Ova klasa stvara HTTP klijenta i ima metodu za slanje HTTP GET zahtjeva:* sendGETRequest (...)* /javni razred RestClient {/ *** Konstruktor za klasu RestClient* /javni RestClient () {System.out.println ("Izrada konstruktora RestClient");}/ *** Način slanja GET zahtjeva na http: // localhost: <
> / getevents* @param port* @return true ako je GET zahtjev uspješno poslan. Lažno, inače.* /javni statički boolean sendGETRequest (int port) {probaj {HttpClient klijent = HttpClientBuilder.create (). Build ();HttpGet getRequest = novi HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse odgovor = client.execute (zahtjev);client.execute (getRequest);System.out.println ("HTTP zahtjev uspješno je poslan."+ "Vraćanje istinito");povratak istinit;}catch (Iznimka e) {e.printStackTrace ();}System.out.println ("Došlo je do neke iznimke tijekom stvaranja HTTP klijenta."+ "Povratak netačan");return false;}}

========== JAVA KOD završava ===========

Korak 2) Pokrenite Restito poslužitelj za preslušavanje i hvatanje zahtjeva poslanih krajnjoj točki 'getevents' u localhost http: // localhost: 9092 / getevents.

========== JAVA CODE započinje ===========

paket com.chamlabs.restfultesting.util;uvoz statičke com.xebialabs.restito.builder.stub.StubHttp.whenHttp;uvoz statičkih com.xebialabs.restito.semantics.Action.status;uvoz statičke com.xebialabs.restito.semantics.Condition.get;uvoz statičke com.xebialabs.restito.semantics.Condition.post;import java.util.List;uvoz org.glassfish.grizzly.http.util.HttpStatus;uvoz com.xebialabs.restito.semantics.Call;uvoz com.xebialabs.restito.server.StubServer;/ *** Ova klasa korisnih programa sadrži nekoliko korisnih metoda poput:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (...)** @autor cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /javna klasa TestUtil {/ *** Uslužna metoda za pokretanje restito stub poslužitelja za prihvaćanje GET zahtjeva* @param poslužitelj* @param port* @param status* /javno statično void restartRestitoServerForGETRequests (StubServer poslužitelj, int port, HttpStatus status){// Ubiti restito poslužiteljif (poslužitelj! = null) {server.stop ();}// Inicijalizirajte i konfigurirajte noviju instancu stub poslužiteljaposlužitelj = novi StubServer (port) .run ();whenHttp (poslužitelj) .match (get ("/ getevents")). then (status (status));}/ *** Uslužna metoda za pokretanje restito stub poslužitelja za prihvaćanje POST zahtjeva* @param poslužitelj* @param port* @param status* /javna statička void restartRestitoServerForPOSTRequests (StubServer poslužitelj, int port, HttpStatus status){// Ubiti restito poslužiteljif (poslužitelj! = null) {server.stop ();}// Inicijalizirajte i konfigurirajte noviju instancu stub poslužiteljaposlužitelj = novi StubServer (port) .run ();whenHttp (poslužitelj) .match (post ("/ postevents")). then (status (status));}/ *** Za zadani restito stub poslužitelj, petlju za zadanu količinu sekundi i* razbiti i vratiti popis poziva s poslužitelja.** @param poslužitelj* @param waitTimeInSeconds* @povratak* @throws InterruptedException* /javni statički popis  waitAndGetCallList (poslužitelj StubServer, int waitTimeInSeconds)baca InterruptedException{int timeoutCount = 0;Popis  callList = server.getCalls ();while (callList.isEmpty ()) {Navoj.spavanje (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {pauza;}pozivna lista = server.getCalls ();}// Pričekajte 2 sekunde da se svi pozivi stave na popis poziva kako bi se eliminirala nejasnoće.Tema.spavanje (2000.);vratiti server.getCalls ();}}

========== JAVA KOD završava ===========

Korak 3) Stvorite test klasu za testiranje gore navedenog klijenta. Pozovite metodu HTTP klijenta sendGETRequest da biste pokrenuli GET zahtjev API-ju 'getevents'.

========== JAVA CODE započinje ===========

import junit.framework.TestCase;uvoz com.chamlabs.restfulservices.client.RestClient;uvoz com.chamlabs.restfultesting.util.TestUtil;uvoz com.xebialabs.restito.semantics.Call;uvoz com.xebialabs.restito.server.StubServer;uvezi statički org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;import java.util.List;uvoz java.util.Map;/ *** Ova klasa sadrži nekoliko testova za provjeru valjanosti operacija RestClient poput:* Pošalji zahtjev(… )* sendRequestWithCustomHeaders (...)* sendPOSTRequestWithJSONBody (…)** /javna klasa RestClientTester proširuje TestCase {privatni statički konačni cijeli broj PORT = 9098;privatni statički konačni cijeli broj PORT2 = 9099;privatni statički konačni cijeli broj PORT3 = 9097;javni RestClientTester () {System.out.println ("Pokretanje probnog RestClientTester");}/ *** Junit test za provjeru valjanosti GET zahtjeva iz RestClienta* Koraci:* 1) Stvorite stub poslužitelj pomoću Restito framework-a i konfigurirajte ga za preslušavanje na danom portu* 2) Pozovite metodu sendGETRequest (…) RestClienta* 3) Restito bilježi odgovarajuće poslane GET zahtjeve, ako ih ima.* 4) Potvrdite je li Restito zabilježio bilo koji GET zahtjev na zadanoj krajnjoj točki* Očekivano ponašanje:*> Restito je trebao uhvatiti GET zahtjev i trebao je uhvatiti samo jedan GET zahtjev.* Napokon:*> Zaustavite poslužitelj kaljenja koji je počeo koristiti restito.* /javni void testGETRequestFromClient () {StubServer poslužitelj = null;probaj {// Ovo će pokrenuti stub poslužitelj na 'PORT' i odgovorit će HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (poslužitelj, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Popis  callList = TestUtil.waitAndGetCallList (poslužitelj, 30);assertTrue ("GET zahtjev nije primljen od RestClienta. Test nije uspio.",(popis poziva! = null) && (callList.size () == 1));}catch (Iznimka e) {e.printStackTrace ();fail ("Test nije uspio zbog iznimke: + e);}napokon {if (poslužitelj! = null) {server.stop ();}}}

========== JAVA KOD završava ===========

Korak 4) Kako provjeriti valjanost GET zahtjeva pomoću zaglavlja i zahtjeva POST s tijelom pomoću Restito okvira.

========== JAVA CODE započinje ===========

/ *** Junit test za potvrdu GET zahtjeva zaglavljima iz RestClienta* Koraci:* 1) Stvorite stub poslužitelj pomoću Restito framework-a i konfigurirajte ga za preslušavanje na danom portu* 2) Pozovite metodu sendGETRequestWithCustomHeaders (…) RestClienta* 3) Restito bilježi odgovarajuće poslane GET zahtjeve, ako ih ima.* 4) Potvrdite je li Restito zabilježio bilo koji GET zahtjev na datoj krajnjoj točki* Očekivano ponašanje:*> Restito je trebao uhvatiti GET zahtjev i trebao je uhvatiti samo jedan GET zahtjev.*> Nabavite zaglavlja snimljenog GET zahtjeva* i pobrinite se da se zaglavlja podudaraju s onima koja su konfigurirana.* Napokon:*> Zaustavite poslužitelj kaljenja koji je počeo koristiti restito.* /javni void testGETRequestWithHeadersFromClient () {StubServer poslužitelj = null;probaj {// Ovo će pokrenuti stub poslužitelj na 'PORT' i odgovorit će HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (poslužitelj, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Popis  callList = TestUtil.waitAndGetCallList (poslužitelj, 30);assertTrue ("GET zahtjev nije primljen od RestClienta. Test nije uspio.",(popis poziva! = null) && (callList.size () == 1));// Potvrdite zaglavlja GET zahtjeva od REST klijentaMap > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET zahtjev sadrži zaglavlje Accept i njegovu vrijednost",headersFromRequest.get ("Prihvati"). sadrži ("tekst / html"));assertTrue ("GET zahtjev sadrži autorizaciju zaglavlja i njegovu vrijednost",headersFromRequest.get ("Autorizacija"). sadrži ("Donositelj 1234567890qwertyuiop"));assertTrue ("GET zahtjev sadrži zaglavlje Cache-Control i njegovu vrijednost",headersFromRequest.get ("Kontrola predmemorije"). sadrži ("no-cache"));assertTrue ("GET zahtjev sadrži zaglavlje Connection i njegovu vrijednost",headersFromRequest.get ("Veza"). contains ("keep-alive"));assertTrue ("GET zahtjev sadrži zaglavlje Content-Type i njegovu vrijednost",headersFromRequest.get ("Content-Type"). contains ("application / json"));}catch (Iznimka e) {e.printStackTrace ();fail ("Test nije uspio zbog iznimke: + e);}napokon {if (poslužitelj! = null) {server.stop ();}}}
/ *** Junit test za potvrdu POST zahtjeva s tijelom i zaglavljima iz RestClienta* Koraci:* 1) Stvorite stub poslužitelj pomoću Restito framework-a i konfigurirajte ga za preslušavanje na danom portu* 2) Pozovite metodu sendPOSTRequestWithJSONBody (…) RestClienta* 3) Restito bilježi odgovarajuće poslane POST zahtjeve, ako ih ima.* 4) Potvrdite je li Restito zabilježio bilo koji POST zahtjev na zadanoj krajnjoj točki* Očekivano ponašanje:*> Restito je trebao uhvatiti POST zahtjev i trebao je uhvatiti samo jedan POST zahtjev.*> Nabavite tijelo snimljenog POST zahtjeva i provjerite JSON vrijednosti* Napokon:*> Zaustavite poslužitelj kaljenja koji je počeo koristiti restito.* /javni void testPOSTRequestWithJSONBody () {StubServer poslužitelj = null;probaj {// Ovo će pokrenuti stub poslužitelj na 'PORT' i odgovorit će HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (poslužitelj, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Popis  callList = TestUtil.waitAndGetCallList (poslužitelj, 30);assertTrue ("POST zahtjev nije primljen od RestClienta. Test nije uspio.",(popis poziva! = null) && (callList.size () == 1));// Potvrdite zaglavlja GET zahtjeva od REST klijentaString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = novi JSONObject (requestBody);assertTrue ("VrijemeUpdated u json-u nije točno",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token u jsonu nije točan",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Ref__token u jsonu nije točan",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Vrsta tokena u jsonu nije ispravna",postRequestJSON.get ("vrsta_tokena"). toString (). equalsIgnoreCase ("donositelj"));assertTrue ("expires_in u jsonu nije točan",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Opseg u jsonu je netočan",postRequestJSON.get ("opseg"). toString (). equalsIgnoreCase (""));}catch (Iznimka e) {e.printStackTrace ();fail ("Test nije uspio zbog iznimke: + e);}napokon {if (poslužitelj! = null) {server.stop ();}}}}

========== JAVA KOD završava ===========

Prednosti upotrebe Restito Framework-a za testiranje klijenta REST

Evo prednosti i prednosti Restito Framework-a za testiranje klijenata ReST-a

  • Ne treba nam razvijati stvarni REST poslužitelj za testiranje REST klijenta.
  • Restito nudi snažne i raznolike uslužne programe i metode za ismijavanje različitog ponašanja poslužitelja. Na primjer: Da biste testirali ponašanje REST klijenta kada Server odgovori HTTP 404 pogreškom ili HTTP 503 pogreškom.
  • Restito poslužitelji mogu se postaviti za nekoliko milisekundi i mogu se prekinuti nakon završetka testova.
  • Restito podržava sve vrste sadržaja HTTP metode kao što su komprimirani, nekomprimirani, objedinjeni, aplikacija / tekst, aplikacija / JSON itd.

Mane upotrebe Restito Framework-a za testiranje klijenta REST

Evo slabosti / nedostataka Restito Framework-a za testiranje klijenta ReST

  • Treba prilagoditi izvor REST klijenta kako bi se "localhost" smatrao poslužiteljskim strojem.
  • Otvaranje poslužitelja u bilo kojoj luci može se sukobiti ako koristimo neki često korišteni port poput '8080' ili '9443' itd.
  • Savjetuje se korištenje priključaka poput 9092 ili 9099, koje drugi alati često ne koriste.

Sažetak:

  • REST označava "Representational State Transfer", što je novi standardni način komunikacije između bilo koja dva sustava u određenom trenutku.
  • REST klijent je metoda ili alat za pozivanje API-ja usluge REST koji je izložen komunikaciji bilo kojeg sustava ili davatelja usluga.
  • U RestServer metodi ili API-ju koji je izložen komunikaciji bilo kojeg sustava ili davatelja usluga.
  • Restito je lagana aplikacija koja vam pomaže izvršiti bilo koju vrstu HTTP zahtjeva
  • Stvorite HTTP klijent i metodu za slanje HTTP GET zahtjeva na bilo koju krajnju točku poslužitelja
  • Pokrenite Restito poslužitelj za preslušavanje i hvatanje zahtjeva poslanih na krajnju točku "getevents".
  • Pokrenite Restito poslužitelj za preslušavanje i hvatanje zahtjeva poslanih krajnjoj točki 'getevents' u localhostu
  • Ovdje smo implementirali primjere za automatsko testiranje samo REST klijenta.
  • Ne treba nam razvijati stvarni REST poslužitelj za testiranje REST klijenta.
  • Treba prilagoditi izvor REST klijenta kako bi se "localhost" smatrao poslužiteljskim strojem.

Ovaj članak je napisao Chandrasekhar Muttineni