Čo je to REST?
REST je skratka pre „REpresentational State Transfer“, čo je nový spôsob komunikácie medzi ľubovoľnými dvoma systémami v danom okamihu. Jeden zo systémov sa nazýva „REST klient“ a druhý sa nazýva „REST server“.
V tomto návode REST sa dozviete:
- Čo je to REST?
- Čo je klient REST?
- Čo je server REST?
- Čo je Restito?
- Ako otestovať klienta REST pomocou nástroja Restito?
- Výhody použitia rámca Restito na testovanie klientov REST
- Nevýhody použitia rámca Restito na testovanie klientov REST
Predtým, ako sa dozvieme o prostredí Restito Framework pre testovanie klientov REST, najskôr sa naučíme niekoľko základných vecí.
Čo je klient REST?
Klient REST je metóda alebo nástroj na vyvolanie API služby REST, ktorý je vystavený na komunikáciu ktorýmkoľvek systémom alebo poskytovateľom služieb. Napríklad: ak je API vystavené tak, aby dostávalo dopravné informácie o trase v reálnom čase od spoločnosti Google, softvér / nástroj, ktorý vyvoláva prevádzkové API Google, sa nazýva klient REST.
Čo je server REST?
Je to metóda alebo API, ktoré sú vystavené komunikácii ktorýmkoľvek poskytovateľom systému alebo služby. Napríklad Google sprístupňuje API na získanie dopravných informácií v reálnom čase na danej trase.
V tomto prípade musí byť server Google funkčný, aby mohol počúvať akékoľvek požiadavky na vystavené rozhranie API od rôznych klientov.
Príklad:
Je načase ustanoviť kompletný kompletný scenár z vyššie uvedených definícií.
Zoberme do úvahy aplikácie na rezerváciu taxíkov, ako je Uber, pretože spoločnosť potrebuje v reálnom čase informácie o dopravnej situácii okolo trás, v ktorých sa dané vozidlo nachádza.
Zvyšný klient:
Tu je klientom mobilná aplikácia Uber, do ktorej sa vodič prihlásil. Táto aplikácia odošle žiadosť do rozhrania REST API vystaveného mapami Google, aby získala údaje v reálnom čase. Napríklad požiadavka HTTP GET.
Zvyšný server:
V tomto príklade je Google poskytovateľom služieb a rozhranie API máp Google odpovedá požadovanými podrobnosťami na žiadosť aplikácie Uber.
Klient aj server sú v komunikácii REST rovnako dôležité.
Tu sme implementovali príklady automatizovaného testovania iba klienta REST. Testovanie servera REST nájdete na https://www.guru99.com/top-6-api-testing-tool.html.
Čo je Restito?
Restito je rámec vyvinutý spoločnosťou Mkotsur. Jedná sa o ľahkú aplikáciu, ktorá vám pomôže vybaviť akýkoľvek druh požiadavky HTTP. Môžete použiť Restito na otestovanie vašich REST API a na vyhľadanie problémov vo vašej aplikácii alebo v sieti.
Ako otestovať klienta REST pomocou nástroja Restito?
Rozdeľme si cvičenie na nasledujúce 4 kroky:
- Vytvorte klienta HTTP a metódu na odoslanie požiadavky HTTP GET na akýkoľvek koncový bod servera. Zatiaľ považujte koncový bod za http: // localhost: 9092 / getevents.
- Spustite server Restito, aby ste počúvali a zachytili žiadosti odoslané koncovému bodu 'getevents' v adresári localhost http: // localhost: 9092 / getevents.
- Vytvorte testovaciu triedu na otestovanie vyššie uvedeného klienta. Vyvolajte metódu klienta „sendGETRequest“ klienta HTTP, aby ste iniciovali požiadavku GET na API „getevents“.
- Overte volanie HTTP GET pomocou rámca Restito.
Poďme sa hlboko ponoriť do každého z vyššie uvedených krokov.
Krok 1) Vytvorte klienta HTTP a spôsob odoslania požiadavky HTTP GET na akýkoľvek koncový bod servera.
========== Spustí sa JAVA KÓD ===========
balíček com.chamlabs.restfulservices.client;import java.util.HashMap;import java.util.Map;import org.apache.http.client.HttpClient;importovať org.apache.http.client.methods.HttpGet;importovať org.apache.http.client.methods.HttpPost;importovať org.apache.http.entity.StringEntity;importovať org.apache.http.impl.client.HttpClientBuilder;importovať org.json.JSONObject;/ *** Táto trieda vytvára klienta HTTP a má metódu na odoslanie žiadosti HTTP GET:* sendGETRequest (…)* /verejná trieda RestClient {/ *** Konštruktor pre triedu RestClient* /public RestClient () {System.out.println ("Vytváranie konštruktora RestClient");}/ *** Metóda na odoslanie žiadosti GET na adresu http: // localhost: <> / getevents* @param port* @return true, ak je požiadavka GET úspešne odoslaná. Falošné, inak.* /public static boolean sendGETRequest (int port) {skúsiť {HttpClient klient = HttpClientBuilder.create (). Build ();HttpGet getRequest = nový HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (požiadavka);client.execute (getRequest);System.out.println ("HTTP požiadavka bola úspešne odoslaná."+ „Vrátiť pravdu“);návrat pravdivý;}úlovok (výnimka e) {e.printStackTrace ();}System.out.println ("Počas vytvárania klienta HTTP sa vyskytla určitá výnimka."+ "Vracia sa nepravda");návrat nepravdivý;}}
========== KÓD JAVA končí ============
Krok 2) Spustite server Restito, aby ste počúvali a zachytili žiadosti odoslané koncovému bodu „getevents“ v localhost http: // localhost: 9092 / getevents.
========== Spustí sa JAVA KÓD ===========
balíček com.chamlabs.restfultesting.util;importovať statický com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importovať statický com.xebialabs.restito.semantics.Action.status;importovať statický com.xebialabs.restito.semantics.Condition.get;importovať statický com.xebialabs.restito.semantics.Condition.post;import java.util.List;importovať org.glassfish.grizzly.http.util.HttpStatus;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;/ *** Táto trieda nástrojov obsahuje niekoľko metód nástrojov, ako napríklad:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /verejná trieda TestUtil {/ *** Metóda nástroja na spustenie servera restito stub na prijímanie požiadaviek GET* @param server* @param port* Stav @param* /public static void restartRestitoServerForGETRequests (server StubServer, int port, stav HttpStatus){// Zabite server restitoif (server! = null) {server.stop ();}// Inicializuje a konfiguruje novšiu inštanciu servera stubserver = nový StubServer (port) .run ();whenHttp (server) .match (get ("/ getevents")). then (status (status));}/ *** Metóda nástroja na spustenie servera restito stub na prijímanie požiadaviek POST* @param server* @param port* Stav @param* /public static void restartRestitoServerForPOSTRequests (server StubServer, int port, stav HttpStatus){// Zabite server restitoif (server! = null) {server.stop ();}// Inicializuje a konfiguruje novšiu inštanciu servera stubserver = nový StubServer (port) .run ();whenHttp (server) .match (post ("/ postevents")). then (status (status));}/ *** Pre daný server s účtom restito stlčte slučku po zadaný počet sekúnd a* rozbiť a vrátiť zoznam hovorov zo servera.** @param server* @param waitTimeInSeconds* @ návrat* @throws InterruptedException* /public static ListwaitAndGetCallList (server StubServer, int waitTimeInSeconds)hodí InterruptedException{int timeoutCount = 0;Zoznam callList = server.getCalls ();while (callList.isEmpty ()) {Závit. Spánok (1 000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {prestávka;}callList = server.getCalls ();}// Počkajte 2 sekundy, aby sa všetky hovory dostali do callList, aby ste eliminovali akúkoľvek chybnosť.Thread.sleep (2000);návrat server.getCalls ();}}
========== KÓD JAVA končí ============
Krok 3) Vytvorte testovaciu triedu na otestovanie vyššie uvedeného klienta. Vyvolajte metódu klienta HTTP sendGETRequest, aby ste iniciovali požiadavku GET na API „getevents“.
========== Spustí sa JAVA KÓD ===========
import junit.framework.TestCase;import com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;import com.xebialabs.restito.semantics.Call;import com.xebialabs.restito.server.StubServer;import statického org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;importovať org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Táto trieda obsahuje niekoľko junit testov na overenie operácií RestClient, ako napríklad:* poslať žiadosť(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /verejná trieda RestClientTester rozširuje TestCase {súkromné statické konečné celé číslo PORT = 9098;súkromné statické konečné celé číslo PORT2 = 9099;súkromné statické konečné celé číslo PORT3 = 9097;public RestClientTester () {System.out.println ("Spustenie testu RestClientTester");}/ *** Test Junit na overenie požiadavky GET od spoločnosti RestClient* Kroky:* 1) Vytvorte stubový server pomocou rámca Restito a nakonfigurujte ho tak, aby počúval na danom porte* 2) Vyvolajte metódu sendGETRequest (…) aplikácie RestClient* 3) Restito zachytáva zodpovedajúce odoslané požiadavky GET, ak nejaké existujú.* 4) Overte, či spoločnosť Restito v danom koncovom bode zachytila akékoľvek požiadavky GET* Očakávané správanie:*> Restito malo zachytiť žiadosť GET a malo zachytiť iba jednu žiadosť GET.* Nakoniec:*> Zastavte spustený server, ktorý začal používať restito.* /public void testGETRequestFromClient () {Server StubServer = null;skúsiť {// Týmto sa spustí stub server na 'PORT' a odpovie s HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);ListcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Žiadosť GET nie je prijatá z aplikácie RestClient. Test zlyhal.",(callList! = null) && (callList.size () == 1));}úlovok (výnimka e) {e.printStackTrace ();fail ("Test zlyhal z dôvodu výnimky: + e);}konečne {if (server! = null) {server.stop ();}}}
========== KÓD JAVA končí ============
Krok 4) Ako overiť požiadavku GET s hlavičkami a požiadavkou POST s telom pomocou rámca Restito.
========== Spustí sa JAVA KÓD ===========
/ *** Test Junit na overenie požiadavky GET s hlavičkami od RestClient* Kroky:* 1) Vytvorte stubový server pomocou rámca Restito a nakonfigurujte ho tak, aby počúval na danom porte* 2) Vyvolajte metódu sendGETRequestWithCustomHeaders (…) nástroja RestClient* 3) Restito zachytáva zodpovedajúce odoslané požiadavky GET, ak nejaké existujú.* 4) Overte, či spoločnosť Restito v danom koncovom bode zachytila akékoľvek požiadavky GET* Očakávané správanie:*> Restito malo zachytiť žiadosť GET a malo zachytiť iba jednu žiadosť GET.*> Získajte hlavičky zachytenej žiadosti GET* a uistite sa, že sa hlavičky zhodujú s nakonfigurovanými hlavičkami.* Nakoniec:*> Zastavte spustený server, ktorý začal používať restito.* /public void testGETRequestWithHeadersFromClient () {Server StubServer = null;skúsiť {// Týmto sa spustí stub server na 'PORT' a odpovie s HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);ListcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Žiadosť GET nie je prijatá z aplikácie RestClient. Test zlyhal.",(callList! = null) && (callList.size () == 1));// Overí hlavičky požiadavky GET od klienta RESTMapa > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("Žiadosť GET obsahuje hlavičku Prijať a jej hodnotu",headersFromRequest.get ("Prijať"). obsahuje ("text / html"));assertTrue ("Žiadosť GET obsahuje autorizáciu hlavičky a jej hodnotu",headersFromRequest.get ("Autorizácia"). obsahuje ("Nositeľ 1234567890qwertyuiop"));assertTrue ("Žiadosť GET obsahuje hlavičku Cache-Control a jej hodnotu",headersFromRequest.get ("Cache-Control"). contains ("no-cache"));assertTrue ("Žiadosť GET obsahuje hlavičku Pripojenie a jej hodnotu",headersFromRequest.get ("Pripojenie"). obsahuje ("keep-alive"));assertTrue ("Žiadosť GET obsahuje hlavičku Content-Type a jej hodnotu",headersFromRequest.get ("Content-Type"). contains ("application / json"));}úlovok (výnimka e) {e.printStackTrace ();fail ("Test zlyhal z dôvodu výnimky: + e);}konečne {if (server! = null) {server.stop ();}}}
/ *** Test Junit na overenie požiadavky POST s textom a hlavičkami z RestClient* Kroky:* 1) Vytvorte stubový server pomocou rámca Restito a nakonfigurujte ho tak, aby počúval na danom porte* 2) Vyvolajte metódu sendPOSTRequestWithJSONBody (…) aplikácie RestClient* 3) Restito zachytáva zodpovedajúce odoslané požiadavky POST, ak nejaké existujú.* 4) Overte, či spoločnosť Restito v danom koncovom bode zachytila akékoľvek požiadavky POST* Očakávané správanie:*> Restito malo zachytiť požiadavku POST a malo zachytiť iba jednu požiadavku POST.*> Získajte telo zachytenej požiadavky POST a overte hodnoty JSON* Nakoniec:*> Zastavte spustený server, ktorý začal používať restito.* /test verejnej neplatnostiPOSTRequestWithJSONBody () {Server StubServer = null;skúsiť {// Týmto sa spustí stub server na 'PORT' a odpovie s HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);ListcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Žiadosť POST nie je prijatá z aplikácie RestClient. Test zlyhal.",(callList! = null) && (callList.size () == 1));// Overí hlavičky požiadavky GET od klienta RESTReťazec requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = nový JSONObject (requestBody);assertTrue ("TimeUpdated v json je nesprávny",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token v JSON je nesprávny",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Obnovovací token v jsone je nesprávny",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Token_type v json je nesprávny",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("nosič"));assertTrue ("Expires_in v json je nesprávny",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Rozsah v JSON je nesprávny",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}úlovok (výnimka e) {e.printStackTrace ();fail ("Test zlyhal z dôvodu výnimky: + e);}konečne {if (server! = null) {server.stop ();}}}}
========== KÓD JAVA končí ============
Výhody použitia rámca Restito na testovanie klientov REST
Tu sú výhody a výhody Restito Framework pre testovanie klientov ReST
- Na testovanie klienta REST nepotrebujeme vývoj skutočného servera REST.
- Spoločnosť Restito poskytuje silné a rozmanité nástroje a metódy na simuláciu odlišného správania servera. Napríklad: Vyskúšať, ako sa chová klient REST, keď server reaguje chybou HTTP 404 alebo HTTP 503.
- Servery Restito je možné nastaviť za niekoľko milisekúnd a je možné ich ukončiť po dokončení testov.
- Restito podporuje všetky typy obsahu metód HTTP, ako je komprimovaný, nekomprimovaný, zjednotený, aplikácia / text, aplikácia / JSON atď.
Nevýhody použitia rámca Restito na testovanie klientov REST
Tu sú nevýhody / nevýhody Restito Framework pre testovanie klientov ReST
- Zdroj klienta REST by mal byť vylepšený, aby považoval „localhost“ za serverový stroj.
- Otvorenie servera v ktoromkoľvek porte môže byť v konflikte, ak použijeme nejaký bežne používaný port, napríklad „8080“ alebo „9443“ atď.
- Odporúča sa používať porty ako 9092 alebo 9099, ktoré iné nástroje bežne nepoužívajú.
Zhrnutie:
- REST je skratka pre „REpresentational State Transfer“, čo je nový štandardný spôsob komunikácie medzi ľubovoľnými dvoma systémami v danom okamihu.
- Klient REST je metóda alebo nástroj na vyvolanie rozhrania API služby REST, ktoré je vystavené komunikácii ktorýmkoľvek systémom alebo poskytovateľom služieb.
- V metóde RestServer alebo API, ktoré je vystavené na komunikáciu ktorýmkoľvek poskytovateľom systému alebo služby.
- Restito je ľahká aplikácia, ktorá vám pomôže vykonať akýkoľvek druh požiadavky HTTP
- Vytvorte klienta HTTP a metódu na odoslanie požiadavky HTTP GET na akýkoľvek koncový bod servera
- Spustite server Restito, aby ste počúvali a zachytili požiadavky odoslané koncovému bodu „getevents“.
- Spustite server Restito, aby ste počúvali a zachytili požiadavky odoslané koncovému bodu 'getevents' v localhost
- Tu sme implementovali príklady automatizovaného testovania iba klienta REST.
- Na testovanie klienta REST nepotrebujeme vývoj skutočného servera REST.
- Zdroj klienta REST by mal byť vylepšený, aby považoval „localhost“ za serverový stroj.
Do tohto článku prispieva Chandrasekhar Muttineni