Mi a REST?
A REST a "REpresentational State Transfer" rövidítést jelenti, amely egy újfajta kommunikáció bármely két rendszer között egy adott időpontban. Az egyik rendszer neve REST Client, a másik neve REST Server.
Ebben a REST oktatóanyagban megtudhatja:
- Mi a REST?
- Mi a REST Client?
- Mi az a REST Server?
- Mi az a Restito?
- Hogyan tesztelhetjük a REST klienst a Restito segítségével?
- A Restito Framework REST kliens tesztelésének előnyei
- Hátrányok a Restito Framework REST kliens teszteléséhez
Mielőtt megismerkedne a Restito Framework for REST kliens tesztelésével, először tanuljon meg néhány alapot.
Mi a REST Client?
A REST Client egy olyan módszer vagy eszköz egy REST szolgáltatás API meghívására, amelyet bármely rendszer vagy szolgáltató kommunikációnak tesz ki. Például: ha egy API ki van téve, hogy valós idejű forgalmi információkat szerezzen egy útvonalról a Google-tól, akkor a Google forgalmi API-t meghívó szoftvert / eszközt REST kliensnek hívják.
Mi az a REST Server?
Ez egy olyan módszer vagy API, amelyet bármely rendszer vagy szolgáltató kommunikációnak tesz ki. Például a Google kitesz egy API-t, hogy valós idejű forgalmi információkat szerezzen egy adott útvonalon.
Itt a Google szervernek működőképesnek kell lennie, hogy meghallgassa a különféle kliensek kérését a kitett API-hoz.
Példa:
Itt az ideje, hogy a fenti meghatározások alapján elkészítsünk egy teljes végponttól végpontig forgatókönyvet.
Vegyük figyelembe az Uberhez hasonló taxifoglalási alkalmazásokat, mivel cégeknek valós idejű információkra van szükségük az adott útvonal körüli forgalmi helyzetről.
Pihenő kliens:
Itt az ügyfél egy Uber mobilalkalmazás, amelybe az illesztőprogram bejelentkezett. Ez az alkalmazás kérést küld a Google Maps által kitett REST API-hoz a valós idejű adatok megszerzéséhez. Például egy HTTP GET kérés.
Rest Server:
Ebben a példában a Google a szolgáltató, és a Google maps API válaszol a szükséges adatokkal az Uber alkalmazás kérésére.
A kliens és a szerver egyaránt fontos a REST kommunikációban.
Itt csak a REST Client automatizálási tesztelésére vezettünk be példákat. A REST szerver tesztelésével kapcsolatban keresse fel a https://www.guru99.com/top-6-api-testing-tool.html webhelyet.
Mi az a Restito?
A Restito egy olyan keret, amelyet Mkotsur fejlesztett ki. Ez egy könnyű alkalmazás, amely segít bármilyen HTTP kérés végrehajtásában. A Restito segítségével tesztelheti a REST API-kat és kereshet problémákat az alkalmazásban vagy a hálózatában.
Hogyan tesztelhetjük a REST klienst a Restito segítségével?
Osszuk fel a gyakorlatot a következő 4 lépésre:
- Hozzon létre egy HTTP-klienst és -módszert, amellyel HTTP GET-kérést küldhet bármely kiszolgáló-végpontra. Egyelőre tekintsük a végpontot: http: // localhost: 9092 / getevents.
- Indítson el egy Restito kiszolgálót a „getevents” végpontnak küldött kérések meghallgatására és rögzítésére a localhostban: http: // localhost: 9092 / getevents.
- Hozzon létre egy tesztosztályt a fenti ügyfél teszteléséhez. Hívja meg a HTTP kliens 'sendGETRequest' metódusát, hogy kezdeményezzen egy GET-kérést az API getevents-hez.
- Ellenőrizze a HTTP GET hívást a Restito keretrendszer használatával.
Merüljünk el mélyen a fenti lépések mindegyikében.
1. lépés: Hozzon létre egy HTTP klienst és metódust a HTTP GET kérés elküldéséhez bármely kiszolgáló végpontjára.
========== JAVA-KÓD indul ===========
com.chamlabs.restfulservices.client csomag;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;/ *** Ez az osztály létrehoz egy HTTP klienst, és rendelkezik egy módszerrel a HTTP GET kérés küldésére:* sendGETRequest (…)* /nyilvános osztály RestClient {/ *** Konstruktor a RestClient osztályhoz* /public RestClient () {System.out.println ("RestClient konstruktor létrehozása");}/ *** Módszer a GET kérés elküldésére a http: // localhost: <> / getevents címre* @param port* @return true, ha a GET kérést sikeresen elküldtük. Hamis, különben.* /public static boolean sendGETRequest (int port) {próbáld ki {HttpClient kliens = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (kérés);client.execute (getRequest);System.out.println ("A HTTP kérés sikeresen elküldve."+ "True Returning");return true;}fogás (e kivétel) {e.printStackTrace ();}System.out.println ("Valami kivétel történt a HTTP kliens létrehozása során."+ "Hamis visszatérés");return false;}}
========== JAVA-KÓD Vége ===========
2. lépés: Indítson el egy Restito kiszolgálót a „getevents” végpontnak elküldött kérelmek meghallgatásához és rögzítéséhez a localhostban: http: // localhost: 9092 / getevents.
========== JAVA-KÓD indul ===========
com.chamlabs.restfultesting.util csomag;importáljon statikus com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importáljon statikus com.xebialabs.restito.semantics.Action.status;importáljon statikus com.xebialabs.restito.semantics.Condition.get;importáljon statikus 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;/ *** Ez a segédosztály számos hasznossági módszert tartalmaz, például:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @ e-mail: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /nyilvános osztály TestUtil {/ *** Segédprogram módszer a restito csonk szerver indításához a GET kérések fogadásához* @param szerver* @param port* @param állapot* /public static void restartRestitoServerForGETRequests (StubServer szerver, int port, HttpStatus állapot){// Öld meg a restito szervertif (szerver! = null) {server.stop ();}// Inicializálja és konfigurálja a csonkakiszolgáló újabb példányátszerver = új StubServer (port) .run ();whenHttp (szerver) .match (get ("/ getevents")). majd (status (status));}/ *** Segédprogram módszer a restito csonk szerver indításához a POST kérések fogadásához* @param szerver* @param port* @param állapot* /public static void restartRestitoServerForPOSTRequests (StubServer szerver, int port, HttpStatus állapot){// Öld meg a restito szervertif (szerver! = null) {server.stop ();}// Inicializálja és konfigurálja a csonkakiszolgáló újabb példányátszerver = új StubServer (port) .run ();whenHttp (szerver) .match (post ("/ postevents")). majd (status (status));}/ *** Egy adott restito csonk kiszolgálón a megadott másodpercekig és* törje meg és küldje vissza a híváslistát a szerverről.** @param szerver* @param waitTimeInSeconds* @Visszatérés* @throws InterruptedException* /nyilvános statikus listawaitAndGetCallList (StubServer szerver, int waitTimeInSeconds)dob InterruptedException{int timeoutCount = 0;Sorolja fel a callList = server.getCalls () listát;while (callList.isEmpty ()) {Szál.alszik (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {szünet;}callList = server.getCalls ();}// Várjon 2 másodpercet, hogy az összes hívás bekerüljön a CallList-be, hogy megszüntesse a falkyness-t.Szál.alszik (2000);return server.getCalls ();}}
========== JAVA-KÓD Vége ===========
3. lépés: Hozzon létre egy tesztosztályt a fenti ügyfél teszteléséhez. Hívja meg a HTTP kliens sendGETRequest metódust, hogy kezdeményezzen egy GET-kérést az API getevents-hez.
========== JAVA-KÓD indul ===========
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áljon statikus org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Ez az osztály számos junit tesztet tartalmaz a RestClient műveletek validálásához, például:* felkérést küld(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /A nyilvános osztály, a RestClientTester kiterjeszti a TestCase {privát statikus végső Egész PORT = 9098;privát statikus végső egész PORT2 = 9099;privát statikus végső egész PORT3 = 9097;public RestClientTester () {System.out.println ("A RestClientTester teszt indítása");}/ *** Junit teszt a RestClient GET kérésének érvényesítésére* Lépések:* 1) Hozzon létre egy csonkiszolgálót a Restito keretrendszer segítségével, és állítsa be úgy, hogy az adott porton hallgasson* 2) Hívja meg a RestClient sendGETRequest (…) metódusát* 3) A Restito rögzíti az elküldött megfelelő GET kéréseket, ha vannak ilyenek.* 4) Érvényesítse, ha a Restito rögzített bármilyen GET kérést az adott végponton* Elvárt viselkedés:*> A Restito-nak el kellett volna foglalnia a GET kérést, és csak egy GET kérést kellett volna rögzítenie.* Végül:*> Állítsa le a csonk kiszolgálót a restito használatának megkezdéséhez.* /public void testGETRequestFromClient () {StubServer szerver = null;próbáld ki {// Ez elindítja a csonkakiszolgálót a „PORT” -on, és HTTP 202-vel válaszol: „ACCEPTED_202”TestUtil.restartRestitoServerForGETRequests (szerver, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);ListcallList = TestUtil.waitAndGetCallList (kiszolgáló, 30);assertTrue ("A GET kérést nem kapta meg a RestClient. A teszt nem sikerült.",(callList! = null) && (callList.size () == 1));}fogás (e kivétel) {e.printStackTrace ();sikertelen ("Teszt sikertelen kivétel miatt: + e);}végül {if (szerver! = null) {server.stop ();}}}
========== JAVA-KÓD Vége ===========
4. lépés: Hogyan érvényesítsük a GET kérést a fejlécekkel és a POST kérést a törzszel a Restito keretrendszer használatával.
========== JAVA-KÓD indul ===========
/ *** Junit teszt a GET kérés hitelesítésére a RestClient fejlécével* Lépések:* 1) Hozzon létre egy csonkiszolgálót a Restito keretrendszer segítségével, és állítsa be úgy, hogy az adott porton hallgasson* 2) Hívja meg a RestClient sendGETRequestWithCustomHeaders (…) metódusát* 3) A Restito rögzíti az elküldött megfelelő GET kéréseket, ha vannak ilyenek.* 4) Érvényesítse, ha a Restito rögzített bármilyen GET kérést egy adott végponton* Elvárt viselkedés:*> A Restito-nak el kellett volna foglalnia a GET kérést, és csak egy GET kérést kellett volna rögzítenie.*> Az elfogott GET-kérelem fejlécének letöltése* és ellenőrizze, hogy a fejlécek megfelelnek-e a konfiguráltaknak.* Végül:*> Állítsa le a csonk kiszolgálót a restito használatának megkezdéséhez.* /public void testGETRequestWithHeadersFromClient () {StubServer szerver = null;próbáld ki {// Ez elindítja a csonkakiszolgálót a „PORT” -on, és HTTP 202-vel válaszol: „ACCEPTED_202”TestUtil.restartRestitoServerForGETRequests (szerver, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);ListcallList = TestUtil.waitAndGetCallList (kiszolgáló, 30);assertTrue ("A GET kérést nem kapta meg a RestClient. A teszt nem sikerült.",(callList! = null) && (callList.size () == 1));// Érvényesítse a REST Client GET kérésének fejlécétTérkép > fejlécekFromRequest = callList.get (0) .getHeaders ();assertTrue ("A GET kérelem tartalmazza az Accept fejlécet és annak értékét",headersFromRequest.get ("Elfogadás"). tartalmazza ("szöveg / html"));assertTrue ("A GET kérelem fejléc-engedélyt és annak értékét tartalmazza",headersFromRequest.get ("Engedélyezés"). tartalmazza ("Bearer 1234567890qwertyuiop");assertTrue ("A GET kérelem tartalmazza a Cache-Control fejlécet és annak értékét",headersFromRequest.get ("Cache-Control"). tartalmazza ("no-cache"));assertTrue ("A GET kérelem fejléc-kapcsolatot és annak értékét tartalmazza",headersFromRequest.get ("Kapcsolat"). tartalmazza ("életben maradni"));assertTrue ("A GET kérelem a Content-Type fejlécet és annak értékét tartalmazza",headersFromRequest.get ("Content-Type"). tartalmazza ("application / json"));}fogás (e kivétel) {e.printStackTrace ();sikertelen ("Teszt sikertelen kivétel miatt: + e);}végül {if (szerver! = null) {server.stop ();}}}
/ *** Junit teszt a POST kérés érvényesítésére a RestClient törzsével és fejlécével* Lépések:* 1) Hozzon létre egy csonkiszolgálót a Restito keretrendszer segítségével, és állítsa be úgy, hogy az adott porton hallgasson* 2) Hívja meg a RestClient sendPOSTRequestWithJSONBody (…) metódusát* 3) A Restito rögzíti az elküldött POST kéréseket, ha vannak ilyenek.* 4) Érvényesítse, ha a Restito rögzített POST kéréseket az adott végponton* Elvárt viselkedés:*> A Restito-nak el kellett volna foglalnia a POST kérést, és csak egy POST kérést kellett volna rögzítenie.*> Szerezze be a rögzített POST-kérelem törzsét és érvényesítse a JSON-értékeket* Végül:*> Állítsa le a csonk kiszolgálót a restito használatának megkezdéséhez.* /public void testPOSTRequestWithJSONBody () {StubServer szerver = null;próbáld ki {// Ez elindítja a csonkakiszolgálót a „PORT” -on, és HTTP 202-vel válaszol: „ACCEPTED_202”TestUtil.restartRestitoServerForPOSTRequests (szerver, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);ListcallList = TestUtil.waitAndGetCallList (kiszolgáló, 30);assertTrue ("A POST kérést nem kapta meg a RestClient. A teszt nem sikerült.",(callList! = null) && (callList.size () == 1));// Érvényesítse a REST Client GET kérésének fejlécétString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = új JSONObject (requestBody);assertTrue ("A jsonban a TimeUpdated nem megfelelő",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("A json hozzáférési_beszélése helytelen",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8");assertTrue ("A json frissítési_tokenje helytelen",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("A json token_type hibás",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("hordozó"));assertTrue ("A json lejárati_in értéke helytelen",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("A json hatóköre nem megfelelő",postRequestJSON.get ("hatókör"). toString (). equalsIgnoreCase (""));}fogás (e kivétel) {e.printStackTrace ();sikertelen ("Teszt sikertelen kivétel miatt: + e);}végül {if (szerver! = null) {server.stop ();}}}}
========== JAVA-KÓD Vége ===========
A Restito Framework REST kliens tesztelésének előnyei
Íme a Restito Framework for ReST kliens tesztelés előnyei / előnyei
- A REST kliens teszteléséhez nincs szükség a tényleges REST szerver fejlesztésére.
- A Restito erős és változatos segédprogramokat és módszereket kínál a kiszolgáló eltérő viselkedésének kigúnyolásához. Például: A REST kliens viselkedésének tesztelése, amikor a kiszolgáló HTTP 404 vagy HTTP 503 hibával válaszol.
- A Restito szerverek néhány ezredmásodperc alatt beállíthatók, és a tesztek befejezése után leállíthatók.
- A Restito minden típusú HTTP-módszert támogat, például tömörített, tömörítetlen, egyesített, alkalmazás / szöveg, alkalmazás / JSON stb.
Hátrányok a Restito Framework REST kliens teszteléséhez
Itt vannak a Restito keretrendszer hátrányai / hátrányai a ReST kliens teszteléséhez
- A REST kliens forrást módosítani kell, hogy a „localhost” kiszolgáló gépnek tekinthető legyen.
- A szerver megnyitása bármely porton ütközhet, ha használunk néhány általánosan használt portot, például a „8080” vagy a „9443” portot.
- Javasoljuk, hogy olyan portokat használjon, mint a 9092 vagy a 9099, amelyeket más eszközök nem szoktak használni.
Összegzés:
- A REST a "REpresentational State Transfer" rövidítést jelenti, amely egy új szabványos kommunikációs mód bármely két rendszer között egy adott időpontban.
- A REST Client egy olyan módszer vagy eszköz egy REST szolgáltatás API meghívására, amelyet bármely rendszer vagy szolgáltató kommunikációnak tesz ki.
- RestServer módszerben vagy olyan API-ban, amelyet bármely rendszer vagy szolgáltató kommunikációnak tesz ki.
- A Restito egy könnyű alkalmazás, amely segít bármilyen HTTP kérés végrehajtásában
- Hozzon létre egy HTTP-klienst és -módszert, amellyel HTTP GET-kérést küldhet bármely kiszolgáló-végpontra
- Indítson el egy Restito kiszolgálót a „getevents” végpontnak küldött kérések meghallgatásához és rögzítéséhez.
- Indítson el egy Restito kiszolgálót a „getevents” végpontnak elküldött kérések meghallgatására és rögzítésére a localhostban
- Itt csak a REST Client automatizálási tesztelésére vezettünk be példákat.
- A REST kliens teszteléséhez nincs szükség a tényleges REST szerver fejlesztésére.
- A REST kliens forrást módosítani kell, hogy a „localhost” kiszolgáló gépnek tekinthető legyen.
A cikket Chandrasekhar Muttineni írta