Preizkušanje odjemalca REST z orodjem Restito

Kazalo:

Anonim

Kaj je REST?

REST pomeni "Representational State Transfer", ki je nov način komunikacije med katerima koli sistemoma v določenem trenutku. Eden od sistemov se imenuje 'REST Client', drugi pa 'REST Server'.

V tej vaji REST boste izvedeli:

  • Kaj je REST?
  • Kaj je stranka REST?
  • Kaj je strežnik REST?
  • Kaj je Restito?
  • Kako preizkusiti odjemalca REST z uporabo Restita?
  • Prednosti uporabe Restito Framework za testiranje odjemalcev REST
  • Slabosti uporabe Restito Framework za testiranje odjemalcev REST

Preden se naučimo o Restito Framework za testiranje odjemalcev REST, se najprej naučimo nekaj osnov.

Kaj je stranka REST?

REST Client je metoda ali orodje za priklic storitvenega API-ja REST, ki ga kateri koli sistem ali ponudnik storitev izpostavi komunikaciji. Na primer: če je API izpostavljen, da od Googla dobi informacije o prometu v realnem času o poti, se programska oprema / orodje, ki prikliče Googlov prometni API, imenuje odjemalec REST.

Kaj je strežnik REST?

Gre za metodo ali API, ki je izpostavljen komunikaciji s strani katerega koli ponudnika sistema ali storitve. Google na primer izpostavi API za pridobivanje informacij o prometu v realnem času na določeni poti.

Tu mora Googlov strežnik delovati in poslušati vse zahteve za izpostavljeni API različnih odjemalcev.

Primer:

Čas je, da iz zgornjih opredelitev določimo popoln scenarij od konca do konca.

Upoštevajmo aplikacije za rezervacijo taksijev, kot je Uber, saj podjetje potrebuje sprotne informacije o stanju v prometu okoli poti, na kateri je določeno vozilo.

Počitniški odjemalec:

Tu je odjemalec mobilna aplikacija Uber, v katero se je voznik prijavil. Ta aplikacija pošlje zahtevo API-ju REST, ki ga izpostavljajo Google Maps, da pridobi podatke v realnem času. Na primer, zahteva HTTP GET.

Strežnik za počitek:

V tem primeru je Google ponudnik storitev, API Google Maps pa na zahtevo aplikacije Uber odgovori z zahtevanimi podrobnostmi.

Tako odjemalec kot strežnik sta pri komunikaciji REST enako pomembna.

Tu smo uvedli primere za avtomatizacijsko testiranje samo odjemalca REST. Za testiranje strežnika REST obiščite https://www.guru99.com/top-6-api-testing-tool.html.

Kaj je Restito?

Restito je ogrodje, ki ga je razvil Mkotsur. To je lahka aplikacija, ki vam pomaga pri izvedbi kakršne koli zahteve HTTP. Restito lahko uporabite za preizkušanje API-jev REST in iskanje težav v aplikaciji ali omrežju.

Kako preizkusiti odjemalca REST z uporabo Restita?

Razdelimo vajo na naslednje 4 korake:

  1. Ustvarite odjemalca HTTP in metodo za pošiljanje zahteve HTTP GET kateri koli končni točki strežnika. Za zdaj velja, da je končna točka http: // localhost: 9092 / getevents.
  1. Zaženite strežnik Restito, da posluša in zajame zahteve, poslane končni točki 'getevents' v localhost http: // localhost: 9092 / getevents.
  1. Ustvarite preskusni razred za preizkus zgornjega odjemalca. Pokličite metodo odjemalca HTTP 'sendGETRequest', da sprožite zahtevo GET za API 'getevents'.
  1. Potrdite klic HTTP GET z ogrodjem Restito.

Poglobimo se v vsakega od zgornjih korakov.

Korak 1) Ustvarite odjemalca HTTP in metodo za pošiljanje zahteve HTTP GET kateri koli končni točki strežnika.

========== Začne se JAVA CODE ===========

paket com.chamlabs.restfulservices.client;uvoz java.util.HashMap;uvoz 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;/ *** Ta razred ustvari odjemalca HTTP in ima metodo za pošiljanje zahteve HTTP GET:* sendGETRequest (…)* /javni razred RestClient {/ *** Konstruktor za razred RestClient* /javni RestClient () {System.out.println ("Ustvarjanje konstruktorja RestClient");}/ *** Način pošiljanja zahteve GET na http: // localhost: <
> / getevents* vrata @param* @return true, če je zahteva GET uspešno poslana. Lažno, sicer.* /javna statična logična vrednost sendGETRequest (int port) {poskusite {HttpClient odjemalec = HttpClientBuilder.create (). Build ();HttpGet getRequest = nov HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse odgovor = client.execute (zahteva);client.execute (getRequest);System.out.println ("Zahteva HTTP je uspešno poslana."+ "Vrnitev True");vrni res;}ulov (izjema e) {e.printStackTrace ();}System.out.println ("Med ustvarjanjem odjemalca HTTP je prišlo do neke izjeme."+ "Vrnitev napačno");vrnitev false;}}

========== KODA JAVA se konča ===========

Korak 2) Zaženite strežnik Restito, da posluša in zajame zahteve, poslane končni točki 'getevents' v localhost http: // localhost: 9092 / getevents.

========== Začne se JAVA CODE ===========

paket com.chamlabs.restfultesting.util;uvoz statičnega com.xebialabs.restito.builder.stub.StubHttp.whenHttp;uvoz statičnega com.xebialabs.restito.semantics.Action.status;uvoz statičnih com.xebialabs.restito.semantics.Condition.get;uvoz statične com.xebialabs.restito.semantics.Condition.post;uvoz java.util.List;uvoz org.glassfish.grizzly.http.util.HttpStatus;uvoz com.xebialabs.restito.semantics.Call;uvoz com.xebialabs.restito.server.StubServer;/ *** Ta razred uporabnosti vsebuje več uporabnostnih metod, kot so:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /javni razred TestUtil {/ *** Uporabna metoda za zagon restito stub strežnika za sprejemanje zahtev GET* @param strežnik* vrata @param* @param status* /javni statični void restartRestitoServerForGETRequests (strežnik StubServer, int vrata, stanje HttpStatus){// Ubiti strežnik restitoif (strežnik! = null) {server.stop ();}// Inicializirajte in konfigurirajte novejši primerek strežnika za onesposobitevstrežnik = nov StubServer (vrata) .run ();whenHttp (strežnik) .match (get ("/ getevents")). then (status (status));}/ *** Uporabna metoda za zagon restito stub strežnika za sprejemanje zahtev POST* @param strežnik* vrata @param* @param status* /javni statični void restartRestitoServerForPOSTRequests (strežnik StubServer, int vrata, stanje HttpStatus){// Ubiti strežnik restitoif (strežnik! = null) {server.stop ();}// Inicializirajte in konfigurirajte novejši primerek strežnika za onesposobitevstrežnik = nov StubServer (vrata) .run ();whenHttp (strežnik) .match (post ("/ postevents")). then (status (status));}/ *** Za dani strežnik restito stub zanko za določeno količino sekund in* prekinite in vrnite seznam klicev s strežnika.** @param strežnik* @param waitTimeInSeconds* @ vrni se* @throws InterruptedException* /javni statični seznam  waitAndGetCallList (strežnik StubServer, int waitTimeInSeconds)vrže InterruptedException{int timeoutCount = 0;Seznam  callList = server.getCalls ();while (callList.isEmpty ()) {Navoj.spanje (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {odmor;}callList = server.getCalls ();}// Počakajte 2 sekundi, da vnesete vse klice v seznam klicev, da odpravite kakršno koli napačnost.Thread.sleep (2000);vrni server.getCalls ();}}

========== KODA JAVA se konča ===========

Korak 3) Ustvarite preskusni razred za preizkus zgornjega odjemalca. Pokličite metodo odjemalca HTTP sendGETRequest, da sprožite zahtevo GET za API 'getevents' API.

========== Začne se JAVA CODE ===========

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;uvozi statični org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;uvoz java.util.List;uvoz java.util.Map;/ *** Ta razred vsebuje več testnih preizkusov za potrditev operacij RestClient, kot so:* Pošlji zahtevo(… )* sendRequestWithCustomHeaders (...)* sendPOSTRequestWithJSONBody (…)** /javni razred RestClientTester podaljša TestCase {zasebni statični končni Integer PORT = 9098;zasebno statično končno celo število PORT2 = 9099;zasebno statično končno celo število PORT3 = 9097;javni RestClientTester () {System.out.println ("Zagon preizkusnega RestClientTester");}/ *** Junit test za potrditev zahteve GET iz RestClient* Koraki:* 1) Ustvari strežni strežnik z ogrodjem Restito in ga konfiguriraj za poslušanje na danih vratih* 2) Prikličite metodo sendGETRequest (…) RestClient* 3) Restito zajame ustrezne poslane zahteve GET, če obstajajo.* 4) Preverite, ali je Restito zajel katero koli zahtevo GET na določeni končni točki* Pričakovano vedenje:*> Restito bi moral zajeti zahtevo GET in zajeti bi moral samo eno zahtevo GET.* Končno:*> Ustavite strežniški strežnik, ki je začel uporabljati restito.* /test javne praznineGETRequestFromClient () {Strežnik StubServer = null;poskusite {// To bo zagnalo strežni strežnik na 'PORT' in se odzvalo s HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (strežnik, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Seznam  callList = TestUtil.waitAndGetCallList (strežnik, 30);assertTrue ("Zahteva GET ni prejeta od RestClienta. Test ni uspel.",(callList! = null) && (callList.size () == 1));}ulov (izjema e) {e.printStackTrace ();fail ("Test ni uspel zaradi izjeme: + e);}končno {if (strežnik! = null) {server.stop ();}}}

========== KODA JAVA se konča ===========

Korak 4) Kako potrditi zahtevo GET z Glavami in zahtevo POST s telesom z uporabo okvira Restito.

========== Začne se JAVA CODE ===========

/ *** Junit test za potrditev zahteve GET z glavami iz RestClient* Koraki:* 1) Ustvari strežni strežnik z ogrodjem Restito in ga konfiguriraj za poslušanje na danih vratih* 2) Prikličite metodo sendGETRequestWithCustomHeaders (…) RestClient* 3) Restito zajame ustrezne poslane zahteve GET, če obstajajo.* 4) Preverite, ali je Restito zajel katero koli zahtevo GET na dani končni točki* Pričakovano vedenje:*> Restito bi moral zajeti zahtevo GET in zajeti bi moral samo eno zahtevo GET.*> Pridobite glave zajete zahteve GET* in se prepričajte, da se glave ujemajo z nastavljenimi.* Končno:*> Ustavite strežniški strežnik, ki je začel uporabljati restito.* /test javne praznineGETRequestWithHeadersFromClient () {Strežnik StubServer = null;poskusite {// To bo zagnalo strežni strežnik na 'PORT' in se odzvalo s HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (strežnik, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Seznam  callList = TestUtil.waitAndGetCallList (strežnik, 30);assertTrue ("Zahteva GET ni prejeta od RestClienta. Test ni uspel.",(callList! = null) && (callList.size () == 1));// Potrdite glave zahtev GET odjemalca RESTMap > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("Zahteva GET vsebuje glavo Accept in njeno vrednost",headersFromRequest.get ("Sprejmi"). vsebuje ("besedilo / html"));assertTrue ("Zahteva GET vsebuje dovoljenje glave in njeno vrednost",headersFromRequest.get ("Pooblastilo"). vsebuje ("Prinašalec 1234567890qwertyuiop"));assertTrue ("Zahteva GET vsebuje glavo Cache-Control in njeno vrednost",headersFromRequest.get ("Nadzor predpomnilnika"). vsebuje ("no-cache"));assertTrue ("Zahteva GET vsebuje povezavo glave in njeno vrednost",headersFromRequest.get ("Povezava"). vsebuje ("ohrani življenje"));assertTrue ("Zahteva GET vsebuje glavo Content-Type in njeno vrednost",headersFromRequest.get ("Content-Type"). vsebuje ("application / json"));}ulov (izjema e) {e.printStackTrace ();fail ("Test ni uspel zaradi izjeme: + e);}končno {if (strežnik! = null) {server.stop ();}}}
/ *** Junit test za potrditev zahteve POST s telesom in glavami RestClient* Koraki:* 1) Ustvari strežni strežnik z ogrodjem Restito in ga konfiguriraj za poslušanje na danih vratih* 2) Prikličite metodo sendPOSTRequestWithJSONBody (…) RestClient* 3) Restito zajame ustrezne poslane zahteve POST, če obstajajo.* 4) Preverite, ali je Restito zajel katero koli zahtevo POST na dani končni točki* Pričakovano vedenje:*> Restito bi moral zajeti zahtevo POST in zajeti bi moral samo eno zahtevo POST.*> Pridobite telo zajete zahteve POST in preverite vrednosti JSON* Končno:*> Ustavite strežniški strežnik, ki je začel uporabljati restito.* /javni preizkus prazninePOSTRequestWithJSONBody () {Strežnik StubServer = null;poskusite {// To bo zagnalo strežni strežnik na 'PORT' in se odzvalo s HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (strežnik, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Seznam  callList = TestUtil.waitAndGetCallList (strežnik, 30);assertTrue ("Zahteva POST ni prejeta od RestClient. Test ni uspel.",(callList! = null) && (callList.size () == 1));// Potrdite glave zahtev GET odjemalca RESTString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = nov JSONObject (requestBody);assertTrue ("TimeUpdated v json ni pravilen",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Tok_dostopa v json je napačen",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Osveževalni žeton v json ni pravilen",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Vrsta žetona v json ni pravilna",postRequestJSON.get ("vrsta žetona"). toString (). equalsIgnoreCase ("nosilec"));assertTrue ("Izteka_in v json ni pravilna",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Obseg v json je napačen",postRequestJSON.get ("obseg"). toString (). equalsIgnoreCase (""));}ulov (izjema e) {e.printStackTrace ();fail ("Test ni uspel zaradi izjeme: + e);}končno {if (strežnik! = null) {server.stop ();}}}}

========== KODA JAVA se konča ===========

Prednosti uporabe Restito Framework za testiranje odjemalcev REST

Tu so prednosti / prednosti Restito Framework za testiranje odjemalcev ReST

  • Za testiranje odjemalca REST ne potrebujemo dejanskega strežnika REST.
  • Restito ponuja močne in raznolike pripomočke in metode za posmeh različnim vedenjem strežnika. Na primer: za preizkus vedenja odjemalca REST, ko se strežnik odzove z napako HTTP 404 ali HTTP 503.
  • Strežnike Restito lahko nastavite v nekaj milisekundah in jih lahko zaključite po zaključku preskusov.
  • Restito podpira vse vrste vsebin metode HTTP, kot so stisnjene, nestisnjene, poenotene, aplikacija / besedilo, aplikacija / JSON itd.

Slabosti uporabe Restito Framework za testiranje odjemalcev REST

Tu so slabosti / pomanjkljivosti Restito Framework za testiranje odjemalcev ReST

  • Vir odjemalca REST je treba prilagoditi, da bo "localhost" obravnavan kot strežniški stroj.
  • Odpiranje strežnika v poljubnih vratih lahko pride do konflikta, če uporabimo nekatera pogosto uporabljena vrata, na primer '8080' ali '9443' itd.
  • Priporočljivo je, da uporabite vrata, kot sta 9092 ali 9099, ki jih druga orodja pogosto ne uporabljajo.

Povzetek:

  • REST pomeni "Representational State Transfer", ki je nov standardni način komunikacije med katerima koli sistemoma v določenem trenutku.
  • REST Client je metoda ali orodje za priklic storitvenega API-ja REST, ki je izpostavljen komunikaciji s strani katerega koli sistema ali ponudnika storitev.
  • V metodi RestServer ali API-ju, ki ga kateri koli sistem ali ponudnik storitev izpostavi za komunikacijo.
  • Restito je lahka aplikacija, ki vam pomaga izvršiti kakršno koli HTTP zahtevo
  • Ustvarite odjemalca HTTP in metodo za pošiljanje zahteve HTTP GET kateri koli končni točki strežnika
  • Zaženite strežnik Restito, da posluša in zajame zahteve, poslane končni točki "getevents".
  • Zaženite strežnik Restito, da posluša in zajame zahteve, poslane končni točki 'getevents' v localhostu
  • Tu smo uvedli primere za avtomatizacijsko testiranje samo odjemalca REST.
  • Za testiranje odjemalca REST ne potrebujemo dejanskega strežnika REST.
  • Vir odjemalca REST je treba prilagoditi, da bo "localhost" obravnavan kot strežniški stroj.

Ta članek prispeva Chandrasekhar Muttineni