Ce este REST?
REST înseamnă „Transfer de stat reprezentativ”, care este un nou mod de comunicare între oricare două sisteme la un moment dat de timp. Unul dintre sisteme se numește „Client REST”, iar celălalt se numește „Server REST”.
În acest tutorial REST, veți învăța:
- Ce este REST?
- Ce este clientul REST?
- Ce este serverul REST?
- Ce este Restito?
- Cum se testează clientul REST utilizând Restito?
- Avantajele utilizării Restito Framework pentru testarea clientului REST
- Dezavantaje ale utilizării Restito Framework pentru testarea clientului REST
Înainte de a afla despre Restito Framework pentru testarea clientului REST, permiteți-ne să învățăm mai întâi câteva elemente de bază.
Ce este clientul REST?
Clientul REST este o metodă sau un instrument pentru a invoca un serviciu API REST care este expus pentru comunicare de către orice sistem sau furnizor de servicii. De exemplu: dacă un API este expus pentru a obține informații de trafic în timp real despre un traseu de la Google, software-ul / instrumentul care invocă API-ul de trafic Google se numește client REST.
Ce este serverul REST?
Este o metodă sau un API care este expus comunicării de către orice sistem sau furnizor de servicii. De exemplu, Google expune un API pentru a obține informații despre trafic în timp real pe un anumit traseu.
Aici, serverul Google trebuie să fie funcțional și să funcționeze pentru a asculta orice solicitări către API expuse de la diferiți clienți.
Exemplu:
Este timpul să stabiliți un scenariu complet End-to-End din definițiile de mai sus.
Să luăm în considerare o aplicație de rezervare taxi, cum ar fi Uber, deoarece o companie are nevoie de informații în timp real despre situația traficului în jurul rutelor pe care se află un anumit vehicul.
Rest Client:
Aici clientul este o aplicație mobilă Uber la care s-a conectat driverul. Această aplicație trimite o cerere către API-ul REST expus de Google Maps pentru a obține date în timp real. De exemplu, o cerere HTTP GET.
Server de odihnă:
În acest exemplu, Google este furnizorul de servicii, iar API-ul Google Maps răspunde cu detaliile solicitate la solicitarea aplicației Uber.
Atât clientul, cât și serverul sunt la fel de importante în comunicarea REST.
Aici, am implementat exemple pentru testarea automatizării numai a clientului REST. Pentru testarea serverului REST, consultați https://www.guru99.com/top-6-api-testing-tool.html.
Ce este Restito?
Restito este un cadru dezvoltat de Mkotsur. Este o aplicație ușoară care vă ajută să executați orice fel de cerere HTTP. Puteți utiliza Restito pentru a testa API-urile REST și pentru a căuta probleme în aplicația dvs. sau în rețeaua dvs.
Cum se testează clientul REST utilizând Restito?
Să împărțim exercițiul în următorii 4 pași:
- Creați un client și o metodă HTTP pentru a trimite o cerere HTTP GET către orice punct final al serverului. Deocamdată, considerați că punctul final este http: // localhost: 9092 / getevents.
- Porniți un server Restito pentru a asculta și captura cererile trimise către punctul final „getevents” în localhost http: // localhost: 9092 / getevents.
- Creați o clasă de testare pentru a testa clientul de mai sus. Invocați metoda „sendGETRequest” a clientului HTTP pentru a iniția o cerere GET către „getevents” API.
- Validați apelul HTTP GET utilizând cadrul Restito.
Să ne scufundăm profund în fiecare dintre pașii de mai sus.
Pasul 1) Creați un client HTTP și o metodă pentru a trimite cererea HTTP GET către orice punct final al serverului.
========== COD JAVA Începe ===========
pachet 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;/ *** Această clasă creează un client HTTP și are o metodă pentru a trimite cererea HTTP GET:* sendGETRequest (...)* /public class RestClient {/ *** Constructor pentru clasa RestClient* /public RestClient () {System.out.println ("Crearea constructorului RestClient");}/ *** Metodă de trimitere a cererii GET către http: // localhost: <> / getevents* @param port* @return true dacă solicitarea GET este trimisă cu succes. Fals, altfel.* /public static boolean sendGETRequest (port int) {încerca {HttpClient client = HttpClientBuilder.create (). Build ();HttpGet getRequest = HttpGet nou ("http: // localhost: + port + "/ getevents");// Răspuns HttpResponse = client.execute (cerere);client.execute (getRequest);System.out.println ("Cererea HTTP este trimisă cu succes."+ „Returning True”);întoarcere adevărată;}catch (Excepția e) {e.printStackTrace ();}System.out.println ("A apărut o excepție în timpul creării clientului HTTP."+ „Returnare falsă”);returnează fals;}}
========== COD JAVA Se încheie ===========
Pasul 2) Porniți un server Restito pentru a asculta și captura cererile trimise către punctul final „getevents” în localhost http: // localhost: 9092 / getevents.
========== COD JAVA Începe ===========
pachet com.chamlabs.restfultesting.util;import static com.xebialabs.restito.builder.stub.StubHttp.whenHttp;import static com.xebialabs.restito.semantics.Action.status;import static com.xebialabs.restito.semantics.Condition.get;import static 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;/ *** Această clasă de utilitate conține mai multe metode de utilitate, cum ar fi:* restartRestitoServerForGETRequests (...)* restartRestitoServerForPOSTRequests (...)* waitAndGetCallList (...)** @autor cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /public class TestUtil {/ *** Metoda de utilitate pentru a porni restito stub server pentru a accepta cereri GET* server @param* @param port* @param status* /public static void restartRestitoServerForGETRequests (server StubServer, port int, starea HttpStatus){// Omoară serverul restitoif (server! = nul) {server.stop ();}// Inițializați și configurați o instanță mai nouă a serverului stubserver = nou StubServer (port) .run ();whenHttp (server) .match (get ("/ getevents")). then (status (status));}/ *** Metoda de utilitate pentru a porni restito stub server pentru a accepta cereri POST* server @param* @param port* @param status* /public static void restartRestitoServerForPOSTRequests (server StubServer, port int, starea HttpStatus){// Omoară serverul restitoif (server! = nul) {server.stop ();}// Inițializați și configurați o instanță mai nouă a serverului stubserver = nou StubServer (port) .run ();whenHttp (server) .match (post ("/ postevents")). then (status (status));}/ *** Pentru un anumit server restito stub, buclați pentru cantitatea dată de secunde și* rupeți și returnați lista de apeluri de pe server.** server @param* @param waitTimeInSeconds* @întoarcere* @throws InterruptedException* /public static ListwaitAndGetCallList (server StubServer, int waitTimeInSeconds)aruncă InterruptedException{int timeoutCount = 0;Listă CallList = server.getCalls ();while (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {pauză;}CallList = server.getCalls ();}// Așteptați 2 secunde pentru a primi toate apelurile în CallList pentru a elimina orice neclintire.Thread.sleep (2000);return server.getCalls ();}}
========== COD JAVA Se încheie ===========
Pasul 3) Creați o clasă de testare pentru a testa clientul de mai sus. Invocați metoda HTTP sendGETRequest pentru a iniția o cerere GET către API-ul „getevents”.
========== COD JAVA Începe ===========
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 org.glassfish.grizzly static.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Această clasă conține mai multe teste junit pentru a valida operațiunile RestClient precum:* Trimite cerere(… )* sendRequestWithCustomHeaders (...)* sendPOSTRequestWithJSONBody (...)** /public class RestClientTester extinde TestCase {privat static final Integer PORT = 9098;privat static Integer PORT2 = 9099;privat static final Integer PORT3 = 9097;public RestClientTester () {System.out.println („Pornirea testului RestClientTester”);}/ *** Test Junit pentru validarea cererii GET de la RestClient* Pași:* 1) Creați un server de stub folosind Restito framework și configurați-l pentru a asculta pe portul dat* 2) Invocați metoda sendGETRequest (...) a RestClient* 3) Restito captează solicitările GET potrivite trimise, dacă există.* 4) Validați dacă Restito a capturat orice solicitări GET pe un punct final* Comportament asteptat:*> Restito ar fi trebuit să capteze solicitarea GET și ar trebui să fi capturat o singură cerere GET.* In cele din urma:*> Opriți serverul stub a început să utilizeze restito.* /public void testGETRequestFromClient () {Server StubServer = nul;încerca {// Acesta va porni serverul stub pe „PORT” și răspunde cu HTTP 202 „ACCEPTED_202”TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);ListăcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Cererea GET nu este primită de la RestClient. Testul a eșuat.",(CallList! = null) && (callList.size () == 1));}catch (Excepția e) {e.printStackTrace ();fail ("Testul a eșuat din cauza excepției: + e);}in cele din urma {if (server! = nul) {server.stop ();}}}
========== COD JAVA Se încheie ===========
Pasul 4) Cum să validați solicitarea GET cu anteturi și cererea POST cu corpul utilizând cadrul Restito.
========== COD JAVA Începe ===========
/ *** Test Junit pentru validarea cererii GET cu anteturi de la RestClient* Pași:* 1) Creați un server de stub folosind Restito framework și configurați-l pentru a asculta pe portul dat* 2) Invocați metoda sendGETRequestWithCustomHeaders (...) a RestClient* 3) Restito captează solicitările GET potrivite trimise, dacă există.* 4) Validați dacă Restito a capturat orice solicitări GET pe un anumit punct final* Comportament asteptat:*> Restito ar fi trebuit să capteze solicitarea GET și ar fi trebuit să capteze o singură solicitare GET.*> Obțineți anteturile cererii GET capturate* și asigurați-vă că anteturile se potrivesc cu cele configurate.* In cele din urma:*> Opriți serverul stub a început să utilizeze restito.* /public void testGETRequestWithHeadersFromClient () {Server StubServer = nul;încerca {// Acesta va porni serverul stub pe „PORT” și răspunde cu HTTP 202 „ACCEPTED_202”TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);ListăcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Cererea GET nu este primită de la RestClient. Testul a eșuat.",(CallList! = null) && (callList.size () == 1));// Validați anteturile cererii GET de la clientul RESTMap > headersFromRequest = callList.get (0) .getHeaders ();assertTrue („Cererea GET conține antetul Accept și valoarea sa”,headersFromRequest.get ("Accept"). conține ("text / html"));assertTrue („Cererea GET conține autorizarea antetului și valoarea acesteia”,headersFromRequest.get ("Autorizare"). conține ("Bearer 1234567890qwertyuiop"));assertTrue („Cererea GET conține antetul Cache-Control și valoarea sa”,headersFromRequest.get ("Cache-Control"). conține ("no-cache"));assertTrue ("Cererea GET conține antet Conexiune și valoarea acesteia",headersFromRequest.get ("Conexiune"). conține ("keep-alive"));assertTrue („Cererea GET conține antetul Content-Type și valoarea sa”,headersFromRequest.get ("Content-Type"). conține ("application / json"));}catch (Excepția e) {e.printStackTrace ();fail ("Testul a eșuat din cauza excepției: + e);}in cele din urma {if (server! = nul) {server.stop ();}}}
/ *** Test Junit pentru validarea cererii POST cu corp și anteturi de la RestClient* Pași:* 1) Creați un server de stub folosind Restito framework și configurați-l pentru a asculta pe portul dat* 2) Invocați metoda sendPOSTRequestWithJSONBody (...) a RestClient* 3) Restito captează solicitările POST potrivite trimise, dacă există.* 4) Validați dacă Restito a capturat orice solicitări POST pe un punct final* Comportament asteptat:*> Restito ar fi trebuit să capteze cererea POST și ar trebui să fi capturat o singură cerere POST.*> Obțineți corpul cererii POST capturate și validați valorile JSON* In cele din urma:*> Opriți serverul stub a început să utilizeze restito.* /public void testPOSTRequestWithJSONBody () {Server StubServer = nul;încerca {// Acesta va porni serverul stub pe „PORT” și răspunde cu HTTP 202 „ACCEPTED_202”TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);ListăcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Cererea POST nu este primită de la RestClient. Testul a eșuat.",(CallList! = null) && (callList.size () == 1));// Validați anteturile cererii GET de la clientul RESTString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = new JSONObject (requestBody);assertTrue ("Timpul actualizat în json este incorect",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token-ul din json este incorect",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("refresh_token în json este incorect",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Tipul_jeton în json este incorect",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bearer"));assertTrue ("Expires_in în json este incorect",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Domeniul de aplicare în json este incorect",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}catch (Excepția e) {e.printStackTrace ();fail ("Testul a eșuat din cauza excepției: + e);}in cele din urma {if (server! = nul) {server.stop ();}}}}
========== COD JAVA Se încheie ===========
Avantajele utilizării Restito Framework pentru testarea clientului REST
Aici sunt avantajele / avantajele Restito Framework pentru testarea clientului ReST
- Nu este nevoie ca serverul REST să fie dezvoltat pentru a testa clientul REST.
- Restito oferă utilități și metode puternice și variate pentru a bate joc de comportamentul diferit al unui server. De exemplu: Pentru a testa cum se comportă clientul REST când serverul răspunde cu erori HTTP 404 sau erori HTTP 503.
- Serverele Restito pot fi configurate în câteva milisecunde și pot fi terminate după finalizarea testelor.
- Restito acceptă toate tipurile de conținut al metodei HTTP, cum ar fi comprimat, necomprimat, unificat, aplicație / text, aplicație / JSON etc.
Dezavantaje ale utilizării Restito Framework pentru testarea clientului REST
Aici, sunt contra / dezavantajul Restito Framework pentru testarea clientului ReST
- Sursa clientului REST ar trebui modificată pentru a considera „localhost” ca o mașină server.
- Deschiderea serverului în orice port poate intra în conflict dacă folosim un port utilizat în mod obișnuit, cum ar fi „8080” sau „9443” etc.
- Este recomandat să utilizați porturi precum 9092 sau 9099, care nu sunt utilizate în mod obișnuit de alte instrumente.
Rezumat:
- REST înseamnă „Transfer de stat reprezentativ”, care este un nou mod standard de comunicare între oricare două sisteme la un moment dat de timp.
- Clientul REST este o metodă sau un instrument pentru a invoca un serviciu API REST care este expus comunicării de către orice sistem sau furnizor de servicii.
- În metoda RestServer sau un API care este expus pentru comunicare de către orice sistem sau furnizor de servicii.
- Restito este o aplicație ușoară care vă ajută să executați orice fel de cerere HTTP
- Creați un client și o metodă HTTP pentru a trimite o cerere HTTP GET către orice punct final al serverului
- Porniți un server Restito pentru a asculta și captura cererile trimise către punctul final „getevents”.
- Porniți un server Restito pentru a asculta și captura cererile trimise către punctul final „getevents” în localhost
- Aici, am implementat exemple pentru testarea automatizării numai a clientului REST.
- Nu este nevoie ca serverul REST să fie dezvoltat pentru a testa clientul REST.
- Sursa clientului REST ar trebui modificată pentru a considera „localhost” ca o mașină server.
Acest articol este contribuit de Chandrasekhar Muttineni