Kas ir ATPŪTA?
REST nozīmē "REpresentational State Transfer", kas ir jauns saziņas veids starp jebkurām divām sistēmām noteiktā laika posmā. Vienu no sistēmām sauc par “REST Client”, bet otru - par “REST Server”.
Šajā REST apmācībā jūs uzzināsiet:
- Kas ir ATPŪTA?
- Kas ir REST klients?
- Kas ir REST serveris?
- Kas ir Restito?
- Kā pārbaudīt REST klientu, izmantojot Restito?
- Priekšrocības, lietojot Restito Framework REST klientu testēšanai
- Trūkumi, lietojot Restito Framework REST klientu testēšanai
Pirms uzzināt par Restito Framework REST klientu testēšanai, vispirms apgūsim dažus pamatus.
Kas ir REST klients?
REST klients ir metode vai rīks, lai izsauktu REST pakalpojuma API, kas ir pakļauts jebkuras sistēmas vai pakalpojumu sniedzēja saziņai. Piemēram: ja API ir pakļauta reāllaika satiksmes informācijas saņemšanai par maršrutu no Google, programmatūru / rīku, kas izsauc Google trafika API, sauc par REST klientu.
Kas ir REST serveris?
Tā ir metode vai API, kas ir pakļauta jebkuras sistēmas vai pakalpojumu sniedzēja saziņai. Piemēram, Google atmasko API, lai reāllaikā iegūtu satiksmes informāciju noteiktā maršrutā.
Šajā gadījumā Google serverim ir jābūt izveidotam un darbam, lai noklausītos jebkādus dažādu klientu pieprasījumus pakļautajai API.
Piemērs:
Ir pienācis laiks izveidot pilnu scenāriju no sākuma līdz beigām, izmantojot iepriekš minētās definīcijas.
Apsvērsim taksometru rezervēšanas lietojumus, piemēram, Uber, jo uzņēmumam ir nepieciešama reāllaika informācija par satiksmes situāciju ap maršrutiem, kuros atrodas konkrētais transportlīdzeklis.
Atpūtas klients:
Šeit klients ir Uber mobilā lietojumprogramma, kurā vadītājs ir pieteicies. Šī lietotne nosūta pieprasījumu REST API, kuru atklāj Google Maps, lai iegūtu reāllaika datus. Piemēram, HTTP GET pieprasījums.
Atpūtas serveris:
Šajā piemērā Google ir pakalpojumu sniedzējs, un Google Maps API atbild ar nepieciešamo informāciju uz Uber lietotnes pieprasījumu.
REST komunikācijā vienlīdz svarīgi ir gan klients, gan serveris.
Šeit mēs esam ieviesuši piemērus tikai REST klienta automatizācijas testēšanai. Lai pārbaudītu REST serveri, skatiet vietni https://www.guru99.com/top-6-api-testing-tool.html.
Kas ir Restito?
Restito ir Mkotsur izstrādāts ietvars. Tā ir viegla lietotne, kas palīdzēs jums izpildīt jebkāda veida HTTP pieprasījumus. Jūs varat izmantot Restito, lai pārbaudītu savas REST API un meklētu problēmas jūsu lietojumprogrammā vai tīklā.
Kā pārbaudīt REST klientu, izmantojot Restito?
Sadalīsim vingrinājumu šādās četrās darbībās:
- Izveidojiet HTTP klientu un metodi, kā nosūtīt HTTP GET pieprasījumu uz jebkuru servera galapunktu. Pagaidām uzskatiet, ka galapunkts ir http: // localhost: 9092 / getevents.
- Sāciet Restito serveri, lai noklausītos un tvertu pieprasījumus, kas nosūtīti galamērķim getevents vietnē localhost http: // localhost: 9092 / getevents.
- Lai pārbaudītu iepriekš minēto klientu, izveidojiet testa klasi. Lai sāktu GET pieprasījumu API “getevents”, izsauciet HTTP klienta metodi “sendGETRequest”.
- Apstipriniet HTTP GET zvanu, izmantojot Restito sistēmu.
Ļaujiet mums dziļi ienirt katrā no iepriekš minētajām darbībām.
1. darbība. Izveidojiet HTTP klientu un metodi, kā nosūtīt HTTP GET pieprasījumu uz jebkuru servera galapunktu.
========== JAVA kods sākas ===========
pakete com.chamlabs.restfulservices.client;importēt java.util.HashMap;importēt java.util.Map;importēt org.apache.http.client.HttpClient;importēt org.apache.http.client.methods.HttpGet;importēt org.apache.http.client.methods.HttpPost;importēt org.apache.http.entity.StringEntity;importēt org.apache.http.impl.client.HttpClientBuilder;importēt org.json.JSONObject;/ *** Šī klase izveido HTTP klientu un tai ir metode, kā nosūtīt HTTP GET pieprasījumu:* sendGETRequest (…)* /publiskā klase RestClient {/ *** Klases RestClient konstruktors* /public RestClient () {System.out.println ("RestClient konstruktora izveide");}/ *** Metode, kā nosūtīt GET pieprasījumu uz vietni http: // localhost: <> / getevents* @param osta* @return true, ja GET pieprasījums ir veiksmīgi nosūtīts. Nepatiesi, citādi.* /publiskais statiskais būla sūtījumsGETRequest (int ports) {izmēģināt {HttpClient klients = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + ports + "/ getevents");// HttpResponse response = client.execute (pieprasījums);client.execute (getRequest);System.out.println ("HTTP pieprasījums ir veiksmīgi nosūtīts."+ "Patiesa atgriešanās");atgriezties taisnība;}nozveja (izņēmums e) {e.printStackTrace ();}System.out.println ("HTTP klienta izveides laikā ir radies kāds izņēmums."+ "Atgriežoties nepatiesi");atgriezties nepatiesa;}}
========== JAVA KODS Beidzas ===========
2. solis. Sāciet Restito serveri, lai noklausītos un tvertu pieprasījumus, kas nosūtīti galamērķim getevents vietnē localhost
========== JAVA kods sākas ===========
pakete com.chamlabs.restfultesting.util;importēt statisko com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importēt statisko com.xebialabs.restito.semantics.Action.status;importēt statisko com.xebialabs.restito.semantics.Condition.get;importēt statisko com.xebialabs.restito.semantics.Condition.post;importēt java.util.List;importēt org.glassfish.grizzly.http.util.HttpStatus;importēt com.xebialabs.restito.semantics.Call;importēt com.xebialabs.restito.server.StubServer;/ *** Šajā lietderības klasē ir vairākas lietderības metodes, piemēram:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTR pieprasījumi (…)* waitAndGetCallList (…)** @author cham6* @ e-pasts: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /publiskā klase TestUtil {/ *** Lietderības metode restito stub servera palaišanai, lai pieņemtu GET pieprasījumus* @param serveris* @param osta* @param statuss* /public static void restartRestitoServerForGETRequests (StubServer serveris, int ports, HttpStatus statuss){// Nogalini restito serverija (serveris! = null) {serveris.stop ();}// Inicializējiet un konfigurējiet jaunāku stub servera instanciserveris = jauns StubServer (ports) .run ();whenHttp (serveris) .match (get ("/ getevents")). tad (statuss (statuss));}/ *** Lietderības metode restito stub servera palaišanai, lai pieņemtu POST pieprasījumus* @param serveris* @param osta* @param statuss* /public static void restartRestitoServerForPOSTRequests (StubServer serveris, int ports, HttpStatus statuss){// Nogalini restito serverija (serveris! = null) {serveris.stop ();}// Inicializējiet un konfigurējiet jaunāku stub servera instanciserveris = jauns StubServer (ports) .run ();whenHttp (serveris) .match (post ("/ postevents")). tad (statuss (status));}/ *** Noteiktam restito stublāja serverim izveidojiet cilpu norādītajam sekunžu skaitam un* pārtraukt un atgriezt zvanu sarakstu no servera.** @param serveris* @param waitTimeInSeconds* @return* @throws InterruptedException* /publiskais statiskais sarakstswaitAndGetCallList (StubServer serveris, int waitTimeInSeconds)met InterruptedException{int timeoutCount = 0;Sarakstā callList = server.getCalls ();while (callList.isEmpty ()) {Vītne.miegs (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {pārtraukums;}callList = server.getCalls ();}// Pagaidiet 2 sekundes, lai visi zvani tiktu iekļauti callList, lai novērstu jebkādu nepatiesību.Thread.sleep (2000);atgriezties server.getCalls ();}}
========== JAVA KODS Beidzas ===========
3. solis. Izveidojiet testa klasi, lai pārbaudītu iepriekšminēto klientu. Lai sāktu GET pieprasījumu API “getevents”, izsauciet HTTP klienta metodi sendGETRequest.
========== JAVA kods sākas ===========
importēt junit.framework.TestCase;importēt com.chamlabs.restfulservices.client.RestClient;importēt com.chamlabs.restfultesting.util.TestUtil;importēt com.xebialabs.restito.semantics.Call;importēt com.xebialabs.restito.server.StubServer;importēt statisko org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;importēt org.json.JSONObject;importēt java.util.List;importēt java.util.Map;/ *** Šajā klasē ir vairāki junit testi, lai apstiprinātu RestClient darbības, piemēram:* Nosūtīt pieprasījumu(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /publiskā klase RestClientTester paplašina TestCase {privāts statisks gala vesels skaitlis PORT = 9098;privāts statisks gala skaitlis PORT2 = 9099;privāts statisks gala skaitlis PORT3 = 9097;public RestClientTester () {System.out.println ("RestClientTester testa sākšana");}/ *** Junit tests, lai apstiprinātu GET pieprasījumu no RestClient* Soļi:* 1) Izveidojiet stumbru serveri, izmantojot Restito sistēmu, un konfigurējiet to, lai klausītos konkrētajā ostā* 2) Izsauciet restClient metodi sendGETRequest (…)* 3) Restito uzņem atbilstošos nosūtītos GET pieprasījumus, ja tādi ir.* 4) Apstipriniet, ja Restito ir uztvēris visus GET pieprasījumus dotajā galapunktā* Paredzētā uzvedība:*> Restito būtu jāaptver GET pieprasījums, un tam būtu jāaptver tikai viens GET pieprasījums.* Visbeidzot:*> Pārtrauciet stūres servera sākto restito izmantošanu.* /public void testGETRequestFromClient () {StubServer serveris = null;izmēģināt {// Tas sāks stumbra serveri portā PORT un atbildēs ar HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (serveris, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);SarakstscallList = TestUtil.waitAndGetCallList (serveris, 30);assertTrue ("GET pieprasījums nav saņemts no RestClient. Pārbaude neizdevās.",(callList! = null) && (callList.size () == 1));}nozveja (izņēmums e) {e.printStackTrace ();neizdoties ("Pārbaude neizdevās izņēmuma dēļ: + e);}beidzot {ja (serveris! = null) {serveris.stop ();}}}
========== JAVA KODS Beidzas ===========
4. solis. Kā apstiprināt GET pieprasījumu ar galvenēm un POST pieprasījumu ar ķermeni, izmantojot Restito sistēmu.
========== JAVA kods sākas ===========
/ *** Junit tests, lai apstiprinātu GET pieprasījumu ar RestClient galvenēm* Soļi:* 1) Izveidojiet stumbru serveri, izmantojot Restito sistēmu, un konfigurējiet to, lai klausītos konkrētajā ostā* 2) Izsauciet restClient metodi sendGETRequestWithCustomHeaders (…)* 3) Restito uzņem atbilstošos nosūtītos GET pieprasījumus, ja tādi ir.* 4) Apstipriniet, ja Restito ir uztvēris visus GET pieprasījumus par noteiktu galapunktu* Paredzētā uzvedība:*> Restito būtu jāaptver GET pieprasījums, un tam būtu jāaptver tikai viens GET pieprasījums.*> Iegūstiet uzņemtā GET pieprasījuma galvenes* un pārliecinieties, vai galvenes sakrīt ar konfigurētajām.* Visbeidzot:*> Pārtrauciet stūres servera sākto restito izmantošanu.* /public void testGETRequestWithHeadersFromClient () {StubServer serveris = null;izmēģināt {// Tas sāks stumbra serveri portā PORT un atbildēs ar HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (serveris, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);SarakstscallList = TestUtil.waitAndGetCallList (serveris, 30);assertTrue ("GET pieprasījums nav saņemts no RestClient. Pārbaude neizdevās.",(callList! = null) && (callList.size () == 1));// Apstipriniet GET pieprasījuma no REST klienta galvenesKarte > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET pieprasījums satur galveni Pieņemt un tā vērtību",headersFromRequest.get ("Accept"). satur ("text / html"));assertTrue ("GET pieprasījums satur galvenes autorizāciju un tā vērtību",headersFromRequest.get ("Autorizācija"). satur ("Nēsātājs 1234567890qwertyuiop");assertTrue ("GET pieprasījums satur galveni Cache-Control un tā vērtību",headersFromRequest.get ("Cache-Control"). satur ("no-cache"));assertTrue ("GET pieprasījums satur galvenes savienojumu un tā vērtību",headersFromRequest.get ("Savienojums"). satur ("uzturēt dzīvu"));assertTrue ("GET pieprasījums satur galveni Content-Type un tā vērtību",headersFromRequest.get ("Content-Type"). satur ("application / json"));}nozveja (izņēmums e) {e.printStackTrace ();neizdoties ("Pārbaude neizdevās izņēmuma dēļ: + e);}beidzot {ja (serveris! = null) {serveris.stop ();}}}
/ *** Junit tests, lai apstiprinātu POST pieprasījumu ar RestClient pamattekstu un galvenēm* Soļi:* 1) Izveidojiet stumbru serveri, izmantojot Restito sistēmu, un konfigurējiet to, lai klausītos konkrētajā ostā* 2) Izsauciet restClient metodi sendPOSTRequestWithJSONBody (…)* 3) Restito uzņem atbilstošos nosūtītos POST pieprasījumus, ja tādi ir.* 4) Apstipriniet, ja Restito ir uztvēris visus POST pieprasījumus dotajā galapunktā* Paredzētā uzvedība:*> Restito būtu jāaptver POST pieprasījums, un tam būtu jāaptver tikai viens POST pieprasījums.*> Iegūstiet uzņemtā POST pieprasījuma pamattekstu un apstipriniet JSON vērtības* Visbeidzot:*> Pārtrauciet stūres servera sākto restito izmantošanu.* /public void testPOSTRequestWithJSONBody () {StubServer serveris = null;izmēģināt {// Tas sāks stumbra serveri portā PORT un atbildēs ar HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (serveris, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);SarakstscallList = TestUtil.waitAndGetCallList (serveris, 30);assertTrue ("POST pieprasījums nav saņemts no RestClient. Pārbaude neizdevās.",(callList! = null) && (callList.size () == 1));// Apstipriniet GET pieprasījuma no REST klienta galvenesString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = jauns JSONObject (requestBody);assertTrue ("Json failā norādītais laiks nav pareizs",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Json piekļuves_token nav pareiza",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Json failā refresh_token nav pareizs",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Json token_type nav pareizs",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("nesējs"));assertTrue ("Json failā expires_in nav pareizs",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Json darbības joma nav pareiza",postRequestJSON.get ("darbības joma"). toString (). equalsIgnoreCase (""));}nozveja (izņēmums e) {e.printStackTrace ();neizdoties ("Pārbaude neizdevās izņēmuma dēļ: + e);}beidzot {ja (serveris! = null) {serveris.stop ();}}}}
========== JAVA KODS Beidzas ===========
Priekšrocības, lietojot Restito Framework REST klientu testēšanai
Šeit ir Restito Framework plusi / priekšrocības ReST klientu testēšanai
- Lai pārbaudītu REST klientu, mums nav jāizstrādā faktiskais REST serveris.
- Restito nodrošina spēcīgas un daudzveidīgas utilītas un metodes, lai izsmietu atšķirīgu servera rīcību. Piemēram: Lai pārbaudītu, kā darbojas REST klients, kad serveris atbild ar kļūdu HTTP 404 vai HTTP 503.
- Restito serverus var iestatīt dažās milisekundēs, un tos var pārtraukt pēc testu pabeigšanas.
- Restito atbalsta visu veidu HTTP metodes saturu, piemēram, saspiestu, nesaspiestu, vienotu, lietojumprogrammu / tekstu, lietojumprogrammu / JSON utt.
Trūkumi, lietojot Restito Framework REST klientu testēšanai
Šeit ir Restito ietvara trūkumi / ReST klientu testēšanas trūkumi
- REST klienta avots ir jāpielāgo, lai “localhost” uzskatītu par servera mašīnu.
- Servera atvēršana jebkurā ostā var būt pretrunīga, ja mēs izmantojam kādu parasti lietotu portu, piemēram, '8080' vai '9443'.
- Ieteicams izmantot tādas ostas kā 9092 vai 9099, kuras citi rīki parasti neizmanto.
Kopsavilkums:
- REST nozīmē "REpresentational State Transfer", kas ir jauns standarta saziņas veids starp jebkurām divām sistēmām noteiktā laika posmā.
- REST klients ir metode vai rīks, lai izsauktu REST pakalpojuma API, kas ir pakļauts jebkuras sistēmas vai pakalpojumu sniedzēja saziņai.
- RestServer metodē vai API, kas ir pakļauta jebkuras sistēmas vai pakalpojumu sniedzēja saziņai.
- Restito ir viegla lietotne, kas palīdz izpildīt jebkāda veida HTTP pieprasījumus
- Izveidojiet HTTP klientu un metodi, kā nosūtīt HTTP GET pieprasījumu uz jebkuru servera galapunktu
- Sāciet Restito serveri, lai noklausītos un tvertu pieprasījumus, kas nosūtīti galapunktam getevents.
- Sāciet Restito serveri, lai noklausītos un tvertu pieprasījumus, kas vietējā hostā nosūtīti galapunktam getevents
- Šeit mēs esam ieviesuši piemērus tikai REST klienta automatizācijas testēšanai.
- Lai pārbaudītu REST klientu, mums nav jāizstrādā faktiskais REST serveris.
- REST klienta avots ir jāpielāgo, lai “localhost” uzskatītu par servera mašīnu.
Šī raksta autors ir Čandrasekhars Muttineni