Kas yra poilsis?
REST reiškia „REpresentational State Transfer“, kuris yra naujas būdas bendrauti tarp bet kurių dviejų sistemų tam tikru momentu. Viena iš sistemų vadinama „REST Client“, kita - „REST Server“.
Šioje „REST“ pamokoje sužinosite:
- Kas yra poilsis?
- Kas yra „REST“ klientas?
- Kas yra REST serveris?
- Kas yra „Restito“?
- Kaip išbandyti „REST“ klientą naudojant „Restito“?
- „Restito Framework“ naudojimo REST kliento bandymams pranašumai
- REST kliento testavimo „Restito Framework“ naudojimo trūkumai
Prieš sužinodami apie „Restito Framework“, skirtą REST kliento testavimui, pirmiausia išmokime kelis pagrindus.
Kas yra „REST“ klientas?
„REST Client“ yra metodas arba įrankis iškviesti REST paslaugos API, kurią veikia bet kurios sistemos ar paslaugų teikėjas. Pvz .: jei API yra naudojama norint gauti realiojo laiko eismo informacijos apie maršrutą iš „Google“, programinė įranga / įrankis, kuris iškviečia „Google“ srauto API, vadinama REST klientu.
Kas yra REST serveris?
Tai metodas arba API, kurį veikia bet kurios sistemos ar paslaugų teikėjo ryšys. Pavyzdžiui, „Google“ pateikia API, kad gautų eismo informaciją realiu laiku tam tikru maršrutu.
Čia reikia, kad „Google“ serveris veiktų ir galėtų klausytis bet kokių užklausų dėl veikiančių API skirtingų klientų.
Pavyzdys:
Atėjo laikas nustatyti išsamų „nuo pabaigos iki pabaigos“ scenarijų pagal anksčiau pateiktus apibrėžimus.
Panagrinėkime tokias taksi užsakymo programas kaip „Uber“, nes įmonei reikalinga realiojo laiko informacija apie eismo situaciją aplink maršrutus, kuriuose yra tam tikra transporto priemonė.
Poilsio klientas:
Čia klientas yra „Uber“ mobilioji programa, prie kurios prisijungė vairuotojas. Ši programa siunčia užklausą „REST“ API, kurią pateikia „Google maps“, kad gautų duomenis realiuoju laiku. Pavyzdžiui, HTTP GET užklausa.
Poilsio serveris:
Šiame pavyzdyje „Google“ yra paslaugų teikėjas, o „Google maps“ API atsako reikalinga informacija į „Uber“ programos užklausą.
REST komunikacijoje tiek klientas, tiek serveris yra vienodai svarbūs.
Čia mes įdiegėme tik „REST“ kliento automatikos bandymų pavyzdžius. Norėdami išbandyti REST serverį, žr. Https://www.guru99.com/top-6-api-testing-tool.html.
Kas yra „Restito“?
„Restito“ yra „Mkotsur“ sukurta sistema. Tai lengva programa, padedanti vykdyti bet kokią HTTP užklausą. Galite naudoti „Restito“ norėdami išbandyti savo REST API ir ieškoti problemų savo programoje ar tinkle.
Kaip išbandyti „REST“ klientą naudojant „Restito“?
Padalinkime pratimą į šiuos 4 žingsnius:
- Sukurkite HTTP klientą ir metodą, kaip siųsti HTTP GET užklausą į bet kurį serverio galinį tašką. Kol kas apsvarstykite, ar galutinis taškas yra http: // localhost: 9092 / getevents.
- Paleiskite „Restito“ serverį, kad galėtumėte išklausyti ir užfiksuoti užklausas, išsiųstas į „hostev“ galinį punktą „localhost“ http: // localhost: 9092 / getevents
- Norėdami išbandyti aukščiau pateiktą klientą, sukurkite bandymo klasę. Iškvieskite HTTP kliento „sendGETRequest“ metodą, kad inicijuotumėte GET užklausą API „getevents“.
- Patvirtinkite HTTP GET skambutį naudodami „Restito“ sistemą.
Giliai pasinerkime į kiekvieną iš aukščiau nurodytų žingsnių.
1 žingsnis. Sukurkite HTTP klientą ir metodą, kaip siųsti HTTP GET užklausą į bet kurį serverio galinį tašką.
========== JAVA kodas prasideda ===========
paketas com.chamlabs.restfulservices.client;importuoti java.util.HashMap;importuoti java.util.Žemėlapis;importuoti org.apache.http.client.HttpClient;importuoti org.apache.http.client.methods.HttpGet;importuoti org.apache.http.client.methods.HttpPost;importuoti org.apache.http.entity.StringEntity;importuoti org.apache.http.impl.client.HttpClientBuilder;importuoti org.json.JSONObject;/ *** Ši klasė sukuria HTTP klientą ir turi metodą, kaip siųsti HTTP GET užklausą:* sendGETRequest (…)* /viešoji klasė „RestClient“ {/ *** „RestClient“ klasės konstruktorius* /viešasis „RestClient“ () {System.out.println („RestClient konstruktoriaus kūrimas“);}/ *** GET užklausos siuntimo būdas adresu http: // localhost: <> / getevents* @param uostas* @return true, jei GET užklausa sėkmingai išsiųsta. Klaidinga, kitaip.* /viešasis statinis loginis siuntimasGETRequest (int portas) {bandyti {HttpClient klientas = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (užklausa);klientas.vykdyti (getRequest);System.out.println ("HTTP užklausa sėkmingai išsiųsta."+ „Grįžtanti tiesa“);grįžti tiesa;}sugavimas (e išimtis) {e.printStackTrace ();}System.out.println ("Kuriant HTTP klientą įvyko tam tikra išimtis."+ "Grįžtant klaidingai");grąžinti klaidingą;}}
========== JAVA kodas baigiasi ===========
2 žingsnis. Paleiskite „Restito“ serverį, kad išklausytumėte ir užfiksuotumėte užklausas, išsiųstas į galutinį punktą „getevents“ localhost http: // localhost: 9092 / getevents.
========== JAVA kodas prasideda ===========
paketas com.chamlabs.restfultesting.util;importuoti statinį com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importuoti statinį com.xebialabs.restito.semantics.Action.status;importuoti statinį com.xebialabs.restito.semantics.Condition.get;importuoti statinį com.xebialabs.restito.semantics.Condition.post;importuoti java.util.List;importuoti org.glassfish.grizzly.http.util.HttpStatus;importuoti com.xebialabs.restito.semantics.Call;importuoti com.xebialabs.restito.server.StubServer;/ *** Šioje naudingumo klasėje yra keli naudingumo metodai, tokie kaip:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @ paštas: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /viešoji klasė „TestUtil“/ *** Naudingumo metodas paleisti „restito stub“ serverį priimti GET užklausas* @param serveris* @param uostas* @param būsena* /public static void restartRestitoServerForGETRequests („StubServer“ serveris, int prievadas, „HttpStatus“ būsena){// Nužudyk restito serverįif (serveris! = null) {server.stop ();}// Inicializuokite ir sukonfigūruokite naujesnį „stub“ serverio egzemplioriųserveris = naujas „StubServer“ (prievadas) .run ();whenHttp (serveris) .match (get ("/ getevents")). tada (statusas (statusas));}/ *** Naudingumo metodas paleisti „restito stub“ serverį priimti POST užklausas* @param serveris* @param uostas* @param būsena* /public static void restartRestitoServerForPOSTRequests („StubServer“ serveris, int prievadas, „HttpStatus“ būsena){// Nužudyk restito serverįif (serveris! = null) {server.stop ();}// Inicializuokite ir sukonfigūruokite naujesnį „stub“ serverio egzemplioriųserveris = naujas „StubServer“ (prievadas) .run ();whenHttp (server) .match (post ("/ postevents")). tada (status (statusas));}/ *** Nurodytam „restito stub“ serveriui atlikite nurodytą sekundžių skaičių ir* pertraukite ir grąžinkite skambučių sąrašą iš serverio.** @param serveris* @param waitTimeInSeconds* @grįžti* @ throws InterruptedException* /viešasis statinis sąrašaswaitAndGetCallList („StubServer“ serveris, int waitTimeInSeconds)meta InterruptedException{int timeoutCount = 0;Išvardykite callList = server.getCalls ();while (callList.isEmpty ()) {Siūlas.miega (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {pertrauka;}callList = server.getCalls ();}// Palaukite 2 sekundes, kad visi skambučiai būtų įtraukti į „CallList“, kad pašalintumėte bet kokią nepagarbą.Siūlai.miega (2000);grąžinti server.getCalls ();}}
========== JAVA kodas baigiasi ===========
3 žingsnis. Sukurkite bandymo klasę, kad išbandytumėte aukščiau pateiktą klientą. Iškvieskite HTTP kliento sendGETRequest metodą, kad inicijuotumėte GET užklausą API „getevents“.
========== JAVA kodas prasideda ===========
importuoti junit.framework.TestCase;importuoti com.chamlabs.restfulservices.client.RestClient;importuoti com.chamlabs.restfultesting.util.TestUtil;importuoti com.xebialabs.restito.semantics.Call;importuoti com.xebialabs.restito.server.StubServer;importuoti statinį org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;importuoti org.json.JSONObject;importuoti java.util.List;importuoti java.util.Žemėlapis;/ *** Šioje klasėje yra keli „junit“ testai, skirti patvirtinti „RestClient“ operacijas, pavyzdžiui:* Išsiųsti prašmą(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /viešoji klasė „RestClientTester“ pratęsia „TestCase“ {privatus statinis galutinis sveikojo uosto skaičius = 9098;privati statinė galutinė sveikoji PORT2 = 9099;privati statinė galutinė sveikoji PORT3 = 9097;public RestClientTester () {System.out.println ("Testo RestClientTester paleidimas");}/ *** „Junit“ testas, skirtas patvirtinti „RestClient“ GET užklausą* Veiksmai:* 1) Naudodamiesi „Restito“ sistema sukurkite „stub“ serverį ir sukonfigūruokite jį klausytis nurodytame prievade* 2) Iškvieskite „RestClient“ metodą sendGETRequest (…)* 3) „Restito“ fiksuoja atitinkamas išsiųstas GET užklausas, jei tokių yra.* 4) Patvirtinkite, jei „Restito“ užfiksavo bet kokių GET užklausų duotame galiniame taške* Laukiamas elgesys:*> „Restito“ turėjo užfiksuoti GET užklausą ir tik vieną GET užklausą.* Pagaliau:*> Sustabdykite „stubito“ serverį, kuris pradėjo naudoti „restito“.* /public void testGETRequestFromClient () {„StubServer“ serveris = nulis;bandyti {// Tai pradės „PORT“ „stub“ serverį ir atsakys naudodamas HTTP 202 „ACCEPTED_202“TestUtil.restartRestitoServerForGETRequests (serveris, PORTAS, ACCEPTED_202);„RestClient.sendGETRequest“ (PORT);SąrašascallList = TestUtil.waitAndGetCallList (serveris, 30);assertTrue ("GET užklausa negauta iš„ RestClient “. Bandymas nepavyko.",(callList! = null) && (callList.size () == 1));}sugavimas (e išimtis) {e.printStackTrace ();žlugti („Bandymas nepavyko dėl išimties:“ + e);}pagaliau {if (serveris! = null) {server.stop ();}}}
========== JAVA kodas baigiasi ===========
4 žingsnis) Kaip patvirtinti GET užklausą su antraštėmis ir POST užklausą su kūnu naudojant „Restito“ sistemą.
========== JAVA kodas prasideda ===========
/ *** „Junit“ testas, skirtas patvirtinti GET užklausą su „RestClient“ antraštėmis* Veiksmai:* 1) Naudodamiesi „Restito“ sistema sukurkite „stub“ serverį ir sukonfigūruokite jį klausytis nurodytame prievade* 2) Iškvieskite „RestClient“ metodą sendGETRequestWithCustomHeaders (…)* 3) „Restito“ fiksuoja atitinkamas išsiųstas GET užklausas, jei tokių yra.* 4) Patvirtinkite, jei „Restito“ užfiksavo bet kokių GET užklausų duotame galiniame taške* Laukiamas elgesys:*> „Restito“ turėjo užfiksuoti GET užklausą ir tik vieną GET užklausą.*> Gaukite užfiksuoto GET užklausos antraštes* ir įsitikinkite, kad antraštės sutampa su sukonfigūruotomis.* Pagaliau:*> Sustabdykite „stubito“ serverį, kuris pradėjo naudoti „restito“.* /public void testGETRequestWithHeadersFromClient () {„StubServer“ serveris = nulis;bandyti {// Tai pradės „PORT“ „stub“ serverį ir atsakys naudodamas HTTP 202 „ACCEPTED_202“TestUtil.restartRestitoServerForGETRequests (serveris, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);SąrašascallList = TestUtil.waitAndGetCallList (serveris, 30);assertTrue ("GET užklausa negauta iš„ RestClient “. Bandymas nepavyko.",(callList! = null) && (callList.size () == 1));// Patvirtinkite GET užklausos iš REST kliento antraštesŽemėlapis > headersFromRequest = callList.get (0) .getHeaders ();assertTrue („GET užklausoje yra antraštė„ Accept “ir jos vertė“,headersFromRequest.get ("Priimti"). Yra ("text / html"));assertTrue ("GET užklausoje yra antraštės įgaliojimas ir jo vertė",headersFromRequest.get ("Autorizacija"). yra ("Turėtojas 1234567890qwertyuiop");assertTrue ("GET užklausoje yra antraštė Cache-Control ir jos vertė",headersFromRequest.get („Cache-Control“). yra („no-cache“));assertTrue ("GET užklausoje yra antraštės ryšys ir jo vertė",headersFromRequest.get ("Connection"). tartalmaz ("keep-alive"));assertTrue („GET užklausoje yra antraštė„ Content-Type “ir jos vertė“,headersFromRequest.get („Content-Type“). yra („application / json“));}sugavimas (e išimtis) {e.printStackTrace ();žlugti („Bandymas nepavyko dėl išimties:“ + e);}pagaliau {if (serveris! = null) {server.stop ();}}}
/ *** „Junit“ testas POST užklausai patvirtinti naudojant „RestClient“ turinį ir antraštes* Veiksmai:* 1) Naudodamiesi „Restito“ sistema sukurkite „stub“ serverį ir sukonfigūruokite jį klausytis nurodytame prievade* 2) Iškvieskite „RestClient“ metodą sendPOSTRequestWithJSONBody (…)* 3) „Restito“ fiksuoja atitinkamas išsiųstas POST užklausas, jei tokių yra.* 4) Patvirtinkite, jei „Restito“ užfiksavo bet kokių POST užklausų pagal nurodytą tikslą* Laukiamas elgesys:*> „Restito“ turėjo užfiksuoti POST užklausą ir tik vieną POST užklausą.*> Gaukite užfiksuoto POST užklausos turinį ir patvirtinkite JSON reikšmes* Pagaliau:*> Sustabdykite „stubito“ serverį, kuris pradėjo naudoti „restito“.* /public void testPOSTRequestWithJSONBody () {„StubServer“ serveris = nulis;bandyti {// Tai pradės „PORT“ „stub“ serverį ir atsakys naudodamas HTTP 202 „ACCEPTED_202“TestUtil.restartRestitoServerForPOSTRequests (serveris, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);SąrašascallList = TestUtil.waitAndGetCallList (serveris, 30);assertTrue ("POST užklausa iš RestClient negaunama. Testas nepavyko.",(callList! = null) && (callList.size () == 1));// Patvirtinkite GET užklausos iš REST kliento antraštesString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = naujas JSONObject (requestBody);assertTrue ("Json neteisingas" TimeUpdated ",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Json" access_token "neteisingas",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Json" refresh_token "neteisingas",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Json simbolio tipas nėra neteisingas",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("nešėjas"));assertTrue ("Json yra netinkamas" expires_in ",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Json sritis yra neteisinga",postRequestJSON.get ("sritis"). toString (). equalsIgnoreCase (""));}sugavimas (e išimtis) {e.printStackTrace ();žlugti („Bandymas nepavyko dėl išimties:“ + e);}pagaliau {if (serveris! = null) {server.stop ();}}}}
========== JAVA kodas baigiasi ===========
„Restito Framework“ naudojimo REST kliento bandymams pranašumai
Čia pateikiami „Restito Framework“ privalumai / privalumai, skirti „ReST“ kliento testavimui
- Norint išbandyti REST klientą, nereikia sukurti tikro REST serverio.
- „Restito“ teikia stiprias ir įvairias komunalines paslaugas ir metodus, kaip tyčiotis iš skirtingo serverio elgesio. Pvz .: Norėdami patikrinti, kaip REST klientas elgiasi, kai serveris atsako su klaida HTTP 404 arba HTTP 503.
- „Restito“ serverius galima nustatyti per kelias milisekundes ir juos galima nutraukti baigus bandymus.
- „Restito“ palaiko visų tipų HTTP metodo turinį, pvz., Suspaustą, nesuspaustą, vieningą, programą / tekstą, programą / JSON ir kt.
REST kliento testavimo „Restito Framework“ naudojimo trūkumai
Čia yra „Restito Framework“ „ReST“ kliento bandymams trūkumai / trūkumai
- REST kliento šaltinį reikėtų patobulinti, kad „localhost“ būtų laikomas serverio mašina.
- Serverio atidarymas bet kuriame uoste gali kilti prieštaravimų, jei mes naudojame dažniausiai naudojamą prievadą, pvz., „8080“ arba „9443“.
- Patartina naudoti tokius prievadus kaip 9092 arba 9099, kurių kiti įrankiai dažniausiai nenaudoja.
Santrauka:
- REST reiškia „REpresentational State Transfer“ - tai naujas standartinis bendravimo būdas tarp bet kurių dviejų sistemų tam tikru momentu.
- „REST Client“ yra metodas arba įrankis iškviesti REST paslaugos API, kurią veikia bet kurios sistemos ar paslaugų teikėjo ryšys.
- „RestServer“ metodu arba API, kurią veikia bet kurios sistemos ar paslaugų teikėjo ryšys.
- „Restito“ yra lengva programa, padedanti vykdyti bet kokio tipo HTTP užklausą
- Sukurkite HTTP klientą ir metodą, kaip siųsti HTTP GET užklausą į bet kurį serverio galinį tašką
- Paleiskite „Restito“ serverį, kad galėtumėte išklausyti ir užfiksuoti užklausas, išsiųstas į „getevents“.
- Paleiskite „Restito“ serverį, kad galėtumėte išklausyti ir užfiksuoti užklausas, siunčiamas į „hostev“ galinį punktą
- Čia mes įdiegėme tik „REST“ kliento automatikos bandymų pavyzdžius.
- Norint išbandyti REST klientą, nereikia sukurti tikro REST serverio.
- REST kliento šaltinį reikėtų patobulinti, kad „localhost“ būtų laikomas serverio mašina.
Prie šio straipsnio prisidėjo Chandrasekhar Muttineni