Co je REST?
REST znamená „REpresentational State Transfer“, což je nový způsob komunikace mezi libovolnými dvěma systémy v daném okamžiku. Jeden ze systémů se nazývá „REST klient“ a druhý se nazývá „REST Server“.
V tomto výukovém programu REST se naučíte:
- Co je REST?
- Co je klient REST?
- Co je REST Server?
- Co je Restito?
- Jak otestovat klienta REST pomocí aplikace Restito?
- Výhody použití Restito Framework pro testování klientů REST
- Nevýhody použití Restito Framework pro testování klientů REST
Než se seznámíme s rámcem Restito pro testování klientů REST, nejprve se naučíme několik základních informací.
Co je klient REST?
Klient REST je metoda nebo nástroj k vyvolání rozhraní API služby REST, které je vystaveno pro komunikaci jakýmkoli poskytovatelem systému nebo služby. Například: pokud je rozhraní API vystaveno, aby získalo informace o provozu v reálném čase o trase z Googlu, software / nástroj, který vyvolá rozhraní Google Traffic API, se nazývá klient REST.
Co je REST Server?
Jedná se o metodu nebo API, které je vystaveno komunikaci jakýmkoli poskytovatelem systému nebo služby. Například Google vystavuje API, aby získal informace o provozu v reálném čase na dané trase.
Zde musí být spuštěn server Google, aby naslouchal jakýmkoli požadavkům na vystavené API od různých klientů.
Příklad:
Je na čase z výše uvedených definic vytvořit kompletní scénář typu End-to-End.
Zvažme aplikace pro rezervaci taxi, jako je Uber, protože společnost potřebuje informace v reálném čase o dopravní situaci kolem tras, ve kterých se dané vozidlo nachází.
Zbytek klienta:
Tady je klient mobilní aplikace Uber, ke které se řidič přihlásil. Tato aplikace odešle požadavek na rozhraní REST API vystavené mapami Google, aby získala data v reálném čase. Například požadavek HTTP GET.
Zbytek serveru:
V tomto příkladu je poskytovatelem služeb Google a rozhraní API map Google odpovídá požadovanými podrobnostmi na žádost aplikace Uber.
Klient i server jsou v komunikaci REST stejně důležité.
Zde jsme implementovali příklady automatizovaného testování pouze klienta REST. Informace o testování serveru REST naleznete na adrese https://www.guru99.com/top-6-api-testing-tool.html.
Co je Restito?
Restito je rámec vyvinutý společností Mkotsur. Je to odlehčená aplikace, která vám pomůže provést jakýkoli druh požadavku HTTP. Restito můžete použít k otestování rozhraní REST API a k vyhledávání problémů ve vaší aplikaci nebo v síti.
Jak otestovat klienta REST pomocí aplikace Restito?
Rozdělme cvičení na následující 4 kroky:
- Vytvořte klienta HTTP a metodu pro odeslání požadavku HTTP GET na libovolný koncový bod serveru. Prozatím považujte koncový bod za http: // localhost: 9092 / getevents.
- Spusťte server Restito, abyste naslouchali a zachytili požadavky odeslané koncovému bodu 'getevents' v localhost http: // localhost: 9092 / getevents.
- Vytvořte testovací třídu k otestování výše uvedeného klienta. Vyvolejte metodu klienta „sendGETRequest“ klienta HTTP k zahájení požadavku GET na „getevents“ API.
- Ověřte volání HTTP GET pomocí rámce Restito.
Pojďme se hlouběji ponořit do každého z výše uvedených kroků.
Krok 1) Vytvořte klienta HTTP a metodu pro odeslání požadavku HTTP GET na libovolný koncový bod serveru.
========== Spustí se JAVA CODE ===========
balíček com.chamlabs.restfulservices.client;import java.util.HashMap;import java.util.Map;importovat org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;importovat org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.HttpClientBuilder;importovat org.json.JSONObject;/ *** Tato třída vytvoří klienta HTTP a má metodu pro odeslání požadavku HTTP GET:* sendGETRequest (…)* /veřejná třída RestClient {/ *** Konstruktor pro třídu RestClient* /public RestClient () {System.out.println ("Vytváření konstruktoru RestClient");}/ *** Metoda pro odeslání požadavku GET na http: // localhost: <> / getevents* @param port* @return true, pokud je požadavek GET úspěšně odeslán. Faleš, jinak.* /public static boolean sendGETRequest (int port) {Snaž se {HttpClient client = HttpClientBuilder.create (). Build ();HttpGet getRequest = nový HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (požadavek);client.execute (getRequest);System.out.println ("Požadavek HTTP byl úspěšně odeslán."+ "Návrat True");návrat true;}chytit (výjimka e) {e.printStackTrace ();}System.out.println ("Během vytváření klienta HTTP došlo k určité výjimce."+ "Vrací se nepravda");návrat false;}}
========== KÓD JAVA končí ===========
Krok 2) Spusťte server Restito, abyste naslouchali a zachytili požadavky odeslané koncovému bodu 'getevents' v localhost http: // localhost: 9092 / getevents.
========== Spustí se JAVA CODE ===========
balíček com.chamlabs.restfultesting.util;importovat statický com.xebialabs.restito.builder.stub.StubHttp.whenHttp;importovat statický com.xebialabs.restito.semantics.Action.status;importovat statický com.xebialabs.restito.semantics.Condition.get;importovat statický com.xebialabs.restito.semantics.Condition.post;import java.util.List;importovat org.glassfish.grizzly.http.util.HttpStatus;importovat com.xebialabs.restito.semantics.Call;importovat com.xebialabs.restito.server.StubServer;/ *** Tato třída nástrojů obsahuje několik metod nástrojů, jako jsou:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /veřejná třída TestUtil {/ *** Metoda nástroje ke spuštění serveru restito stub, který přijímá požadavky GET* @param server* @param port* @param status* /public static void restartRestitoServerForGETRequests (server StubServer, int port, stav HttpStatus){// Zabijte server restitoif (server! = null) {server.stop ();}// Inicializace a konfigurace novější instance serveru se zakázaným inzerovánímserver = nový StubServer (port) .run ();whenHttp (server) .match (get ("/ getevents")). then (status (status));}/ *** Metoda nástroje pro spuštění serveru restito stub pro příjem požadavků POST* @param server* @param port* @param status* /public static void restartRestitoServerForPOSTRequests (server StubServer, int port, stav HttpStatus){// Zabijte server restitoif (server! = null) {server.stop ();}// Inicializace a konfigurace novější instance serveru se zakázaným inzerovánímserver = nový StubServer (port) .run ();whenHttp (server) .match (post ("/ postevents")). then (status (status));}/ *** U daného serveru se serverem restito stub smyčka po daný počet sekund a* rozbít a vrátit seznam volání ze serveru.** @param server* @param waitTimeInSeconds* @vrátit se* @throws InterruptedException* /public static ListwaitAndGetCallList (server StubServer, int waitTimeInSeconds)vyvolá InterruptedException{int timeoutCount = 0;Seznam callList = server.getCalls ();while (callList.isEmpty ()) {Závit. Spánek (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {přestávka;}callList = server.getCalls ();}// Počkejte 2 sekundy, aby se všechna volání dostala do callList, aby se odstranila jakákoli nepravdivost.Thread.sleep (2000);vrátit server.getCalls ();}}
========== KÓD JAVA končí ===========
Krok 3) Vytvořte testovací třídu pro otestování výše uvedeného klienta. Vyvolejte metodu klienta sendGETRequest klienta HTTP k zahájení požadavku GET na „getevents“ API.
========== Spustí se JAVA CODE ===========
import junit.framework.TestCase;import com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;importovat com.xebialabs.restito.semantics.Call;importovat com.xebialabs.restito.server.StubServer;importovat statický org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;importovat org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Tato třída obsahuje několik testů junit pro ověření operací RestClient jako:* poslat žádost(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /veřejná třída RestClientTester rozšiřuje TestCase {soukromé statické konečné celé číslo PORT = 9098;soukromé statické konečné celé číslo PORT2 = 9099;soukromé statické konečné celé číslo PORT3 = 9097;public RestClientTester () {System.out.println ("Spuštění testu RestClientTester");}/ *** Test Junit k ověření požadavku GET od RestClient* Kroky:* 1) Vytvořte stub server pomocí rámce Restito a nakonfigurujte jej tak, aby naslouchal na daném portu* 2) Vyvolejte metodu sendGETRequest (…) aplikace RestClient* 3) Restito zachycuje odpovídající odeslané požadavky GET, pokud existují.* 4) Ověřte, zda Restito v daném koncovém bodě zachytil jakékoli požadavky GET* Očekávané chování:*> Restito by měl zachytit požadavek GET a měl by zachytit pouze jeden požadavek GET.* Konečně:*> Zastavte server se zakázaným inzerováním, který začal používat restito.* /public void testGETRequestFromClient () {Server StubServer = null;Snaž se {// Tím se spustí stub server na 'PORT' a odpoví HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);ListcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Žádost GET není přijata z RestClient. Test se nezdařil.",(callList! = null) && (callList.size () == 1));}chytit (výjimka e) {e.printStackTrace ();fail ("Test se nezdařil z důvodu výjimky: + e);}Konečně {if (server! = null) {server.stop ();}}}
========== KÓD JAVA končí ===========
Krok 4) Jak ověřit požadavek GET s hlavičkami a požadavek POST s tělem pomocí rámce Restito.
========== Spustí se JAVA CODE ===========
/ *** Test Junit k ověření požadavku GET s hlavičkami z RestClient* Kroky:* 1) Vytvořte stub server pomocí rámce Restito a nakonfigurujte jej tak, aby naslouchal na daném portu* 2) Vyvolejte metodu sendGETRequestWithCustomHeaders (…) aplikace RestClient* 3) Restito zachycuje odpovídající odeslané požadavky GET, pokud existují.* 4) Ověřte, zda společnost Restito v daném koncovém bodě zachytila jakékoli požadavky GET* Očekávané chování:*> Restito by měl zachytit požadavek GET a měl by zachytit pouze jeden požadavek GET.*> Získejte záhlaví zachyceného požadavku GET* a ujistěte se, že záhlaví odpovídají nakonfigurovaným záhlaví.* Konečně:*> Zastavte server se zakázaným inzerováním, který začal používat restito.* /public void testGETRequestWithHeadersFromClient () {Server StubServer = null;Snaž se {// Tím se spustí stub server na 'PORT' a odpoví HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);ListcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Žádost GET není přijata z RestClient. Test se nezdařil.",(callList! = null) && (callList.size () == 1));// Ověřte záhlaví požadavku GET od klienta RESTMap > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("požadavek GET obsahuje hlavičku Accept a její hodnotu",headersFromRequest.get ("Přijmout"). obsahuje ("text / html"));assertTrue ("GET požadavek obsahuje hlavičku Autorizace a její hodnotu",headersFromRequest.get ("Autorizace"). obsahuje ("Nositel 1234567890qwertyuiop"));assertTrue ("požadavek GET obsahuje hlavičku Cache-Control a její hodnotu",headersFromRequest.get ("Cache-Control"). contains ("no-cache"));assertTrue ("požadavek GET obsahuje záhlaví připojení a jeho hodnotu",headersFromRequest.get ("Připojení"). obsahuje ("keep-alive"));assertTrue ("požadavek GET obsahuje záhlaví Content-Type a jeho hodnotu",headersFromRequest.get ("Content-Type"). contains ("application / json"));}chytit (výjimka e) {e.printStackTrace ();fail ("Test se nezdařil z důvodu výjimky: + e);}Konečně {if (server! = null) {server.stop ();}}}
/ *** Test Junit k ověření požadavku POST s tělem a hlavičkami z RestClient* Kroky:* 1) Vytvořte stub server pomocí rámce Restito a nakonfigurujte jej tak, aby naslouchal na daném portu* 2) Vyvolejte metodu sendPOSTRequestWithJSONBody (…) RestClient* 3) Restito zachycuje odpovídající odeslané požadavky POST, pokud existují.* 4) Ověřte, zda Restito v daném koncovém bodě zachytil nějaké požadavky POST* Očekávané chování:*> Restito by měl zachytit požadavek POST a měl by zachytit pouze jeden požadavek POST.*> Získejte tělo zachyceného požadavku POST a ověřte hodnoty JSON* Konečně:*> Zastavte server se zakázaným inzerováním, který začal používat restito.* /public void testPOSTRequestWithJSONBody () {Server StubServer = null;Snaž se {// Tím se spustí stub server na 'PORT' a odpoví HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);ListcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Žádost POST není přijata z RestClient. Test se nezdařil.",(callList! = null) && (callList.size () == 1));// Ověřte záhlaví požadavku GET od klienta RESTŘetězec requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = nový JSONObject (requestBody);assertTrue ("TimeUpdated v JSON je nesprávný",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token v JSON je nesprávný",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Obnovovací token v JSON je nesprávný",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Token_type v JSON je nesprávný",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("nosič"));assertTrue ("Expires_in v JSON je nesprávný",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Rozsah v JSON je nesprávný",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}chytit (výjimka e) {e.printStackTrace ();fail ("Test se nezdařil z důvodu výjimky: + e);}Konečně {if (server! = null) {server.stop ();}}}}
========== KÓD JAVA končí ===========
Výhody použití Restito Framework pro testování klientů REST
Zde jsou výhody / výhody Restito Framework pro testování klientů ReST
- K testování klienta REST nepotřebujeme vývoj skutečného serveru REST.
- Restito poskytuje silné a rozmanité nástroje a metody k zesměšňování odlišného chování serveru. Například: Chcete-li otestovat, jak se chová klient REST, když server odpoví chybou HTTP 404 nebo HTTP 503.
- Servery Restito lze nastavit za několik milisekund a lze je ukončit po dokončení testů.
- Restito podporuje všechny typy obsahu metod HTTP, jako je komprimovaný, nekomprimovaný, unifikovaný, aplikace / text, aplikace / JSON atd.
Nevýhody použití Restito Framework pro testování klientů REST
Zde jsou nevýhody / nevýhoda Restito Framework pro testování klienta ReST
- Zdroj klienta REST by měl být vylepšen, aby považoval 'localhost' za serverový stroj.
- Otevření serveru v jakémkoli portu může být v konfliktu, pokud použijeme nějaký běžně používaný port, například „8080“ nebo „9443“ atd.
- Doporučuje se používat porty jako 9092 nebo 9099, které jiné nástroje běžně nepoužívají.
Souhrn:
- REST znamená „REpresentational State Transfer“, což je nový standardní způsob komunikace mezi libovolnými dvěma systémy v daném okamžiku.
- Klient REST je metoda nebo nástroj k vyvolání rozhraní API služby REST, které je vystaveno komunikaci jakýmkoli systémem nebo poskytovatelem služeb.
- V metodě RestServer nebo API, které je vystaveno pro komunikaci jakýmkoli poskytovatelem systému nebo služby.
- Restito je lehká aplikace, která vám pomůže provést jakýkoli druh požadavku HTTP
- Vytvořte klienta HTTP a metodu pro odeslání požadavku HTTP GET na libovolný koncový bod serveru
- Spusťte server Restito, abyste poslouchali a zachytili požadavky odeslané koncovému bodu „getevents“.
- Spusťte server Restito, abyste naslouchali a zachytili požadavky odeslané koncovému bodu 'getevents' v localhost
- Zde jsme implementovali příklady automatizovaného testování pouze klienta REST.
- K testování klienta REST nepotřebujeme vývoj skutečného serveru REST.
- Zdroj klienta REST by měl být vylepšen, aby považoval 'localhost' za serverový stroj.
Do tohoto článku přispívá Chandrasekhar Muttineni