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:
- 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.
- Zaženite strežnik Restito, da posluša in zajame zahteve, poslane končni točki 'getevents' v localhost http: // localhost: 9092 / getevents.
- Ustvarite preskusni razred za preizkus zgornjega odjemalca. Pokličite metodo odjemalca HTTP 'sendGETRequest', da sprožite zahtevo GET za API 'getevents'.
- 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 seznamwaitAndGetCallList (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);SeznamcallList = 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);SeznamcallList = 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);SeznamcallList = 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