REST kliendi testimine Restito tööriista abil

Lang L: none (table-of-contents):

Anonim

Mis on puhkus?

REST tähistab "REpresentational State Transfer", mis on uus viis suhelda mis tahes kahe süsteemi vahel antud ajahetkel. Ühte süsteemi nimetatakse REST-kliendiks ja teist REST-serveriks.

Selles REST-i õpetuses saate teada:

  • Mis on puhkus?
  • Mis on REST klient?
  • Mis on REST-server?
  • Mis on Restito?
  • Kuidas testida REST-i klienti Restito abil?
  • REST-kliendi testimiseks Restito raamistiku kasutamise eelised
  • REST-kliendi testimise Restito Framework kasutamise puudused

Enne Restito Framework for REST-i klientide testimise tundmaõppimist õppige kõigepealt mõned põhitõed.

Mis on REST klient?

REST Client on meetod või tööriist REST teenuse API kutsumiseks, mis on avatud mis tahes süsteemi või teenuse pakkuja suhtluseks. Näiteks: kui API on avatud reaalajas liiklusteabe hankimiseks Google'ilt, nimetatakse tarkvara / tööriista, mis kutsub Google'i liikluse API-d REST-kliendiks.

Mis on REST-server?

See on meetod või API, mida iga süsteem või teenusepakkuja suhtleb. Näiteks paljastab Google API, et saada antud marsruudil reaalajas liiklusteavet.

Siin peab Google'i server olema töökorras ja kuulama avatud klientide taotlusi avatud API-le.

Näide:

On aeg luua ülaltoodud definitsioonide põhjal täielik stsenaarium.

Mõelgem takso broneerimise rakendustele nagu Uber, kuna ettevõte vajab reaalajas teavet liiklusolukorra kohta nende marsruutide ümber, kus antud sõiduk asub.

Puhka klient:

Siin on klient Uberi mobiilirakendus, kuhu juht on sisse loginud. See rakendus saadab reaalajas andmete saamiseks Google Mapsi paljastatud REST API-le päringu. Näiteks HTTP GET-päring.

Puhkeserver:

Selles näites on Google teenusepakkuja ja Google Mapsi API vastab Uberi rakenduse taotlusele vajalike üksikasjadega.

Nii klient kui server on REST-suhtluses võrdselt olulised.

Siin oleme rakendanud näiteid ainult REST-i kliendi automatiseerimise testimiseks. REST-serveri testimiseks vaadake veebisaiti https://www.guru99.com/top-6-api-testing-tool.html.

Mis on Restito?

Restito on raamistik, mille on välja töötanud Mkotsur. See on kerge rakendus, mis aitab teil täita mis tahes tüüpi HTTP-päringuid. Restito abil saate testida oma REST-i API-sid ja otsida probleeme rakenduses või võrgus.

Kuidas testida REST-i klienti Restito abil?

Jagame harjutuse järgmiseks neljaks etapiks:

  1. Looge HTTP klient ja meetod HTTP GET-päringu saatmiseks mis tahes serveri lõpp-punkti. Praegu arvake, et lõpp-punkt on http: // localhost: 9092 / getevents.
  1. Käivitage Restito server, et kuulata ja hõivata otsepunkti getevents saadetud päringuid saidil localhost http: // localhost: 9092 / getevents.
  1. Ülaltoodud kliendi testimiseks looge testiklass. GET-päringu algatamiseks API-le getevents käivitage HTTP-kliendi meetod "sendGETRequest".
  1. Kinnitage HTTP GET-kõne Restito raamistiku abil.

Sukeldugem igasse ülaltoodud sammu.

Samm 1) Looge HTTP klient ja meetod HTTP GET-päringu saatmiseks mis tahes serveri lõpp-punkti.

========== JAVA-KOOD algab ===========

pakett com.chamlabs.restfulservices.client;import java.util.HashMap;import 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;/ *** See klass loob HTTP-kliendi ja sellel on meetod HTTP GET-päringu saatmiseks:* sendGETRequest (…)* /avalik klass RestClient {/ *** Klassi RestClient konstruktor* /public RestClient () {System.out.println ("RestClienti konstruktori loomine");}/ *** Meetod GET-päringu saatmiseks aadressile http: // localhost: <
> / getevents* @param port* @return true, kui GET-päring on edukalt saadetud. Vale, muidu.* /avalik staatiline boolean sendGETRequest (int port) {proovige {HttpClient klient = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = klient.teema (taotlus);klient.teema (getRequest);System.out.println ("HTTP-päring on edukalt saadetud."+ "Tõsi tagasi");return true;}saak (erand e) {e.printStackTrace ();}System.out.println ("HTTP-kliendi loomisel on tekkinud mõni erand."+ "Vale tagastamine");return false;}}

========== JAVA-KOOD lõpeb ===========

Samm 2) Käivitage Restito server, et kuulata ja hõivata otsepunkti getevents saadetud päringuid localhostis http: // localhost: 9092 / getevents

========== JAVA-KOOD algab ===========

pakett com.chamlabs.restfultesting.util;import staatiline com.xebialabs.restito.builder.stub.StubHttp.whenHttp;import staatiline com.xebialabs.restito.semantics.Action.status;import staatiline com.xebialabs.restito.semantics.Condition.get;import staatiline com.xebialabs.restito.semantics.Condition.post;import java.util.List;import org.glassfish.grizzly.http.util.HttpStatus;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;/ *** See utiliidiklass sisaldab mitmeid kasulikke meetodeid, näiteks:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTR taotlused (…)* waitAndGetCallList (…)** @author cham6* @ e-post: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /avalik klass TestUtil {/ *** Utiliidi meetod restito stub-serveri käivitamiseks GET-päringute vastuvõtmiseks* @param server* @param port* @param staatus* /public static void restartRestitoServerForGETRequests (StubServeri server, int-port, olek HttpStatus){// Tapa restito serverif (server! = null) {server.stop ();}// Initsialiseerige ja konfigureerige stub-serveri uuem eksemplarserver = uus StubServer (port) .run ();millalHttp (server) .match (get ("/ getevents")). siis (olek (olek));}/ *** Utiliidi meetod restito stub-serveri käivitamiseks POST-taotluste vastuvõtmiseks* @param server* @param port* @param staatus* /public static void restartRestitoServerForPOSTRequests (StubServeri server, int-port, olek HttpStatus){// Tapa restito serverif (server! = null) {server.stop ();}// Initsialiseerige ja konfigureerige stub-serveri uuem eksemplarserver = uus StubServer (port) .run ();millalHttp (server) .match (postitus ("/ postevents")). siis (olek (olek));}/ *** Teatud restito pistikuserveri jaoks looge määratud sekundite arv ja* murda ja tagasta kõneloend serverist.** @param server* @param waitTimeInSeconds* @return* @throws InterruptedException* /avalik staatiline loend  waitAndGetCallList (StubServeri server, int waitTimeInSeconds)viskab InterruptedException{int timeoutCount = 0;Loendisse  callList = server.getCalls ();while (callList.isEmpty ()) {Niit.unne (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {murda;}callList = server.getCalls ();}// Oodake 2 sekundit, et kõik kõned saaksid heliloendisse, et kõrvaldada igasugune ebakindlus.Thread.sleep (2000);return server.getCalls ();}}

========== JAVA-KOOD lõpeb ===========

Samm 3) Looge ülaltoodud kliendi testimiseks testiklass. GET-päringu algatamiseks API geteventsile kutsuge HTTP-klient sendGETRequest-meetod.

========== JAVA-KOOD algab ===========

import junit.framework.TestCase;importida com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;import staatiline org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** See klass sisaldab mitmeid junit-teste, et kinnitada RestClienti toiminguid, näiteks:* sendRequest (…)* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /avalik klass RestClientTester laiendab TestCase {privaatne staatiline lõplik täisarv PORT = 9098;privaatne staatiline lõplik täisarv PORT2 = 9099;privaatne staatiline lõplik täisarv PORT3 = 9097;public RestClientTester () {System.out.println ("RestClientTesteri testi käivitamine");}/ *** Juniti test RestClienti GET-päringu kinnitamiseks* Sammud:* 1) Looge Restito raamistiku abil pistikuserver ja konfigureerige see antud pordi kuulamiseks* 2) Käivitage RestClienti meetod sendGETRequest (…)* 3) Restito hõivab saadetud vastavad GET-päringud, kui neid on.* 4) Kontrollige, kui Restito on tabanud GET-päringuid antud lõpp-punktis* Eeldatav käitumine:*> Restito oleks pidanud hõivama GET-päringu ja see peaks olema hõivanud ainult ühe GET-päringu.* Lõpuks:*> Peata restitot kasutama hakanud serveriserver.* /public void testGETRequestFromClient () {StubServeri server = null;proovige {// See käivitab 'PORT' stub-serveri ja vastab HTTP 202-ga 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Loend  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("RestClientilt ei saadud GET-päringut. Test nurjus.",(callList! = null) && (callList.size () == 1));}saak (erand e) {e.printStackTrace ();nurjuma ("Test ebaõnnestus erandi tõttu: + e);}lõpuks {if (server! = null) {server.stop ();}}}

========== JAVA-KOOD lõpeb ===========

Samm 4) Kuidas kinnitada GET-päringut päistega ja POST-i taotlust kehaga Restito raamistiku abil.

========== JAVA-KOOD algab ===========

/ *** Juniti test GET-päringu kinnitamiseks RestClienti päistega* Sammud:* 1) Looge Restito raamistiku abil pistikuserver ja konfigureerige see antud pordi kuulamiseks* 2) Käivitage RestClienti meetod sendGETRequestWithCustomHeaders (…)* 3) Restito hõivab saadetud vastavad GET-päringud, kui neid on.* 4) Kontrollige, kas Restito on tabanud antud lõpp-punktis mingeid GET-päringuid* Eeldatav käitumine:*> Restito oleks pidanud hõivama GET-päringu ja see peaks olema hõivanud ainult ühe GET-päringu.*> Hankige hõivatud GET-i päised* ja veenduge, et päised vastavad konfigureeritutele.* Lõpuks:*> Peata restitot kasutama hakanud serveriserver.* /public void testGETRequestWithHeadersFromClient () {StubServeri server = null;proovige {// See käivitab 'PORT' stub-serveri ja vastab HTTP 202-ga 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Loend  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("RestClientilt ei saadud GET-päringut. Test nurjus.",(callList! = null) && (callList.size () == 1));// Kinnitage REST-kliendi GET-päringu päisedKaart > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET-päring sisaldab päist Accept ja selle väärtust",päisedFromRequest.get ("Nõustu". sisaldab ("tekst / html"));assertTrue ("GET-päring sisaldab päise autoriseerimist ja selle väärtust",headersFromRequest.get ("Autoriseerimine"). sisaldab ("Kandja 1234567890qwertyuiop");assertTrue ("GET-päring sisaldab päise vahemälu-juhtimist ja selle väärtust",headersFromRequest.get ("Cache-Control"). sisaldab ("no-cache"));assertTrue ("GET-päring sisaldab päiseühendust ja selle väärtust",päisedFromRequest.get ("Ühendus"). sisaldab ("hoia elus"));assertTrue ("GET-päring sisaldab päist Content-Type ja selle väärtust",headersFromRequest.get ("Content-Type"). sisaldab ("application / json"));}saak (erand e) {e.printStackTrace ();nurjuma ("Test ebaõnnestus erandi tõttu: + e);}lõpuks {if (server! = null) {server.stop ();}}}
/ *** Juniti test POST-päringu kinnitamiseks koos RestClienti keha ja päistega* Sammud:* 1) Looge Restito raamistiku abil pistikuserver ja konfigureerige see antud pordi kuulamiseks* 2) Käivitage RestClienti meetod sendPOSTRequestWithJSONBody (…)* 3) Restito hõivab vastavad POST-päringud, kui neid on.* 4) Kontrollige, kas Restito on tabanud antud lõpp-punktis mingeid POST-taotlusi* Eeldatav käitumine:*> Restito oleks pidanud jäädvustama POST-päringu ja see peaks olema hõivanud ainult ühe POST-päringu.*> Hankige hõivatud POST-päringu keha ja kinnitage JSON-i väärtused* Lõpuks:*> Peata restitot kasutama hakanud serveriserver.* /public void testPOSTRequestWithJSONBody () {StubServeri server = null;proovige {// See käivitab 'PORT' stub-serveri ja vastab HTTP 202-ga 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Loend  callList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("RestClientilt ei saadud POST-i päringut. Test nurjus.",(callList! = null) && (callList.size () == 1));// Kinnitage REST-kliendi GET-päringu päisedString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = uus JSONObject (requestBody);assertTrue ("Jsonis on TimeUpdated vale",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("jsoni juurdepääsukõne on vale",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8");assertTrue ("Jsoni värskenduse_kõne on vale",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Jsoni token_type on vale",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("kandja"));assertTrue ("Jsonis aeguv_sis on vale",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Jsoni ulatus on vale",postRequestJSON.get ("ulatus"). toString (). equalsIgnoreCase (""));}saak (erand e) {e.printStackTrace ();nurjuma ("Test ebaõnnestus erandi tõttu: + e);}lõpuks {if (server! = null) {server.stop ();}}}}

========== JAVA-KOOD lõpeb ===========

REST-kliendi testimiseks Restito raamistiku kasutamise eelised

Siin on RestST Framework for ReST klientide testimise plussid / eelised

  • Me ei vaja REST-kliendi testimiseks tegeliku REST-serveri väljatöötamist.
  • Restito pakub tugevaid ja mitmekülgseid utiliite ja meetodeid serveri erineva käitumise mõnitamiseks. Näiteks: REST-kliendi käitumise testimiseks, kui server vastab HTTP-tõrke 404 või HTTP 503-ga.
  • Restito servereid saab seadistada mõne millisekundiga ja need saab pärast testide lõppemist sulgeda.
  • Restito toetab igat tüüpi HTTP-meetodi sisu, näiteks tihendatud, tihendamata, ühtne, rakendus / tekst, rakendus / JSON jne.

REST-kliendi testimise Restito Framework kasutamise puudused

Siin on ReST-i klientide testimise Restito raamistiku miinused / puudused

  • REST-kliendi allikat tuleks kohandada, et pidada "localhostit" serverimasinaks.
  • Serveri avamine mis tahes pordis võib olla vastuolus, kui kasutame mõnda tavaliselt kasutatavat porti, näiteks '8080' või '9443'.
  • Soovitatav on kasutada selliseid porte nagu 9092 või 9099, mida teised tööriistad tavaliselt ei kasuta.

Kokkuvõte:

  • REST tähistab "REpresentational State Transfer", mis on uus standardne viis mis tahes kahe süsteemi vahel teatud ajahetkel.
  • REST Client on meetod või tööriist REST-teenuse API käivitamiseks, mis on avatud süsteemi või teenusepakkuja suhtlusele.
  • RestServeri meetodis või API-s, mis on avatud mis tahes süsteemi või teenuse pakkuja suhtlemiseks.
  • Restito on kerge rakendus, mis aitab teil täita mis tahes tüüpi HTTP-päringuid
  • Looge HTTP klient ja meetod HTTP GET-päringu saatmiseks mis tahes serveri lõpp-punkti
  • Käivitage Restito server, et kuulata ja jäädvustada lõpp-punktile getevents saadetud taotlusi.
  • Käivitage Restito server, et kuulata ja hõivata localhostis lõpp-punktile getevents saadetud taotlusi
  • Siin oleme rakendanud näiteid ainult REST-i kliendi automatiseerimise testimiseks.
  • Me ei vaja REST-kliendi testimiseks tegeliku REST-serveri väljatöötamist.
  • REST-kliendi allikat tuleks kohandada, et pidada "localhostit" serverimasinaks.

Selle artikli autor on Chandrasekhar Muttineni