Mikä on REST?
REST on lyhenne sanoista "REpresentational State Transfer", joka on uusi tapa kommunikoida minkä tahansa kahden järjestelmän välillä tiettynä ajankohtana. Yksi järjestelmistä on nimeltään 'REST Client', ja toinen on nimeltään 'REST Server'.
Tässä REST-opetusohjelmassa opit:
- Mikä on REST?
- Mikä on REST Client?
- Mikä on REST-palvelin?
- Mikä on Restito?
- Kuinka testata REST-asiakasta Restiton avulla?
- Edut Restito Frameworkin käytöstä REST-asiakastestauksessa
- Haittoja Restito Frameworkin käyttämiselle REST-asiakastestauksessa
Ennen kuin opimme Restito Framework for REST -asiakastestauksesta, opi ensin muutama perusta.
Mikä on REST Client?
REST Client on menetelmä tai työkalu REST-palvelun sovellusliittymän kutsumiseksi, joka on alttiina minkä tahansa järjestelmän tai palveluntarjoajan viestinnälle. Esimerkiksi: jos sovellusliittymä altistuu reaaliaikaisen liikennetiedon hankkimiselle reitiltä Googlelta, Google-liikenteen sovellusliittymää kutsuvaa ohjelmistoa / työkalua kutsutaan REST-asiakkaaksi.
Mikä on REST-palvelin?
Se on menetelmä tai sovellusliittymä, joka altistuu minkä tahansa järjestelmän tai palveluntarjoajan viestinnälle. Esimerkiksi Google paljastaa sovellusliittymän saadakseen reaaliaikaisia liikennetietoja tietyllä reitillä.
Tässä Google-palvelimen on oltava toiminnassa kuunnellakseen altistuneelle sovellusliittymälle mahdollisesti lähetettyjä pyyntöjä eri asiakkailta.
Esimerkki:
On aika luoda täydellinen päähän-skenaario yllä olevista määritelmistä.
Tarkastellaanpa Uberin kaltaisia taksivaraussovelluksia, koska yritys tarvitsee reaaliaikaisia tietoja liikennetilanteesta niiden reittien ympärillä, joilla tietty ajoneuvo sijaitsee.
Lepo-asiakas:
Tässä asiakas on Uber-mobiilisovellus, johon kuljettaja on kirjautunut. Tämä sovellus lähettää pyynnön REST-sovellusliittymään, jonka Google maps paljastaa, saadakseen reaaliaikaiset tiedot. Esimerkiksi HTTP GET -pyyntö.
Lepopalvelin:
Tässä esimerkissä Google on palveluntarjoaja, ja Google maps -sovellusliittymä vastaa tarvittavilla tiedoilla Uber-sovelluksen pyyntöön.
Sekä asiakas että palvelin ovat yhtä tärkeitä REST-viestinnässä.
Tässä olemme toteuttaneet esimerkkejä vain REST-asiakkaan automaatiotestauksesta. Lisätietoja REST-palvelimen testaamisesta on osoitteessa https://www.guru99.com/top-6-api-testing-tool.html.
Mikä on Restito?
Restito on Mkotsurin kehittämä kehys. Se on kevyt sovellus, joka auttaa sinua suorittamaan kaikenlaisia HTTP-pyyntöjä. Voit testata REST-sovellusliittymiä ja etsiä ongelmia sovelluksestasi tai verkostostasi Restiton avulla.
Kuinka testata REST-asiakasta Restiton avulla?
Jaetaan harjoitus seuraaviin 4 vaiheeseen:
- Luo HTTP-asiakas ja menetelmä lähettää HTTP GET -pyyntö mihin tahansa palvelimen päätepisteeseen. Pidä toistaiseksi päätepisteenä http: // localhost: 9092 / getevents.
- Aloita Restito-palvelin kuuntelemaan ja sieppaamaan päätepisteelle getevents lähetetyt pyynnöt localhostissa http: // localhost: 9092 / getevents.
- Luo testiluokka testataksesi yllä olevaa asiakasta. Kutsu HTTP-asiakas 'sendGETRequest' -menetelmä aloittaaksesi GET-pyynnön sovellusliittymän getevents-sovellukselle.
- Vahvista HTTP GET-puhelu Restito-kehyksen avulla.
Sukelletaanpa syvälle kaikkiin yllä oleviin vaiheisiin.
Vaihe 1) Luo HTTP-asiakas ja tapa lähettää HTTP GET -pyyntö mihin tahansa palvelimen päätepisteeseen.
========== JAVA-KOODI alkaa ===========
paketti com.chamlabs.restfulservices.client;tuo java.util.HashMap;tuo java.util.Kartta;tuo org.apache.http.client.HttpClient;tuo org.apache.http.client.methods.HttpGet;tuo org.apache.http.client.methods.HttpPost;tuo org.apache.http.entity.StringEntity;tuo org.apache.http.impl.client.HttpClientBuilder;tuo org.json.JSONObject;/ *** Tämä luokka luo HTTP-asiakkaan ja sillä on menetelmä lähettää HTTP GET -pyyntö:* sendGETRequest (…)* /public class RestClient {/ *** RestClient-luokan rakentaja* /public RestClient () {System.out.println ("RestClient-rakentajan luominen");}/ *** Menetelmä lähettää GET-pyyntö osoitteelle http: // localhost: <> / getevents* @param-portti* @return true, jos GET-pyyntö lähetetään onnistuneesti. Väärä, muuten.* /julkinen staattinen looginen lähetysGETRequest (int-portti) {yrittää {HttpClient-asiakas = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + portti + "/ getevents");// HttpResponse response = client.execute (pyyntö);client.execute (getRequest);System.out.println ("HTTP-pyynnön lähetys onnistui."+ "Paluu totta");palaa totta;}saalis (poikkeus e) {e.printStackTrace ();}System.out.println ("Joitakin poikkeuksia on tapahtunut HTTP-asiakasohjelman luomisen aikana."+ "Palaa väärään");return false;}}
========== JAVA-KOODI päättyy ===========
Vaihe 2) Käynnistä Restito-palvelin kuunnellaksesi ja sieppaamalla päätepisteelle getevents lähetetyt pyynnöt localhostissa http: // localhost: 9092 / getevents.
========== JAVA-KOODI alkaa ===========
paketti com.chamlabs.restfultesting.util;tuo staattinen com.xebialabs.restito.builder.stub.StubHttp.whenHttp;tuo staattinen com.xebialabs.restito.semantics.Action.status;tuo staattinen com.xebialabs.restito.semantics.Condition.get;tuo staattinen com.xebialabs.restito.semantics.Condition.post;tuo java.util.List;tuo org.glassfish.grizzly.http.util.HttpStatus;tuoda com.xebialabs.restito.semantics.Call;tuo com.xebialabs.restito.server.StubServer;/ *** Tämä hyötyluokka sisältää useita apuvälineitä, kuten:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (uudelleen)* waitAndGetCallList (…)** @author cham6* @sähköposti: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /julkinen luokka TestUtil {/ *** Apuohjelma tapa käynnistää restito-tynkäpalvelin hyväksymään GET-pyynnöt* @param-palvelin* @param-portti* @param-tila* /public static void restartRestitoServerForGETRequests (StubServer-palvelin, int-portti, HttpStatus-tila){// Tapa restito-palvelinif (palvelin! = null) {server.stop ();}// Alusta ja määritä tynkäpalvelimen uudempi ilmentymäpalvelin = uusi StubServer (portti) .run ();whenHttp (palvelin) .match (get ("/ getevents")). sitten (status (tila));}/ *** Apuohjelma tapa käynnistää restito-tynkäpalvelin hyväksymään POST-pyynnöt* @param-palvelin* @param-portti* @param-tila* /public static void restartRestitoServerForPOSTRequests (StubServer-palvelin, int-portti, HttpStatus-tila){// Tapa restito-palvelinif (palvelin! = null) {server.stop ();}// Alusta ja määritä tynkäpalvelimen uudempi ilmentymäpalvelin = uusi StubServer (portti) .run ();whenHttp (palvelin) .match (viesti ("/ postevents")). sitten (tila (tila));}/ *** Tietyn restito-tynkäpalvelimen silmukka tietylle sekunnille ja* katkaise ja palauta puhelulista palvelimelta.** @param-palvelin* @param waitTimeInSeconds* @paluu* @throws InterruptedException* /julkinen staattinen luettelowaitAndGetCallList (StubServer-palvelin, int waitTimeInSeconds)heittää keskeytetyn poikkeuksen{int timeoutCount = 0;Luettelo callList = server.getCalls ();while (callList.isEmpty ()) {Lanka. Unessa (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {tauko;}callList = server.getCalls ();}// Odota 2 sekuntia saadaksesi kaikki puhelut callListiin, jotta kaikki falkynessit poistetaan.Thread.sleep (2000);return server.getCalls ();}}
========== JAVA-KOODI päättyy ===========
Vaihe 3) Luo testiluokka testataksesi yllä olevaa asiakasta. Kutsu HTTP-asiakas sendGETRequest-menetelmä aloittaaksesi GET-pyynnön sovellusliittymän getevents-sovellukselle.
========== JAVA-KOODI alkaa ===========
tuo junit.framework.TestCase;tuo com.chamlabs.restfulservices.client.RestClient;tuo com.chamlabs.restfultesting.util.TestUtil;tuoda com.xebialabs.restito.semantics.Call;tuo com.xebialabs.restito.server.StubServer;tuo staattinen org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;tuo org.json.JSONObject;tuo java.util.List;tuo java.util.Kartta;/ *** Tämä luokka sisältää useita junit-testejä RestClient-toimintojen vahvistamiseksi, kuten:* Lähetä pyyntö(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /public class RestClientTester laajentaa TestCase {yksityinen staattinen lopullinen kokonaislukuportti = 9098;yksityinen staattinen lopullinen kokonaisluku PORT2 = 9099;yksityinen staattinen lopullinen kokonaisluku PORT3 = 9097;public RestClientTester () {System.out.println ("Testin RestClientTester käynnistäminen");}/ *** Junit-testi RestClientin GET-pyynnön vahvistamiseksi* Askeleet:* 1) Luo tynkäpalvelin Restito-kehyksen avulla ja määritä se kuuntelemaan tietyssä portissa* 2) Käynnistä restClientin sendGETRequest (…) -menetelmä* 3) Restito tallentaa mahdolliset lähetetyt vastaavat GET-pyynnöt.* 4) Vahvista, jos Restito on kaapannut GET-pyyntöjä annetulla päätepisteellä* Odotettu käyttäytyminen:*> Restito olisi pitänyt kaapata GET-pyyntö ja sen olisi pitänyt kaapata vain yksi GET-pyyntö.* Lopuksi:*> Pysäytä itsepalvelin, joka aloitti restiton käytön.* /public void testGETRequestFromClient () {StubServer-palvelin = null;yrittää {// Tämä käynnistää porttipalvelimen portissa ja vastaa HTTP 202: lla 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (palvelin, PORTTI, ACCEPTED_202);RestClient.sendGETRequest (PORTTI);LuettelocallList = TestUtil.waitAndGetCallList (palvelin, 30);assertTrue ("GET-pyyntöä ei vastaanoteta RestClientiltä. Testi epäonnistui.",(callList! = null) && (callList.size () == 1));}saalis (poikkeus e) {e.printStackTrace ();epäonnistua ("Testi epäonnistui poikkeuksen vuoksi: + e);}lopulta {if (palvelin! = null) {server.stop ();}}}
========== JAVA-KOODI päättyy ===========
Vaihe 4) Kuinka vahvistaa GET-pyyntö otsikoilla ja POST-pyyntö rungolla Restito-kehyksen avulla.
========== JAVA-KOODI alkaa ===========
/ *** Junit-testi GET-pyynnön vahvistamiseksi RestClientin otsikoilla* Askeleet:* 1) Luo tynkäpalvelin Restito-kehyksen avulla ja määritä se kuuntelemaan tietyssä portissa* 2) Käynnistä restClient-menetelmä sendGETRequestWithCustomHeaders (…)* 3) Restito tallentaa mahdolliset lähetetyt vastaavat GET-pyynnöt.* 4) Vahvista, jos Restito on kaapannut GET-pyyntöjä tietylle päätepisteelle* Odotettu käyttäytyminen:*> Restiton olisi pitänyt siepata GET-pyyntö ja sen olisi pitänyt siepata vain yksi GET-pyyntö.*> Hae siepatun GET-pyynnön otsikot* ja varmista, että otsikot vastaavat määritettyjä.* Lopuksi:*> Pysäytä itsepalvelin, joka aloitti restiton käytön.* /public void testGETRequestWithHeadersFromClient () {StubServer-palvelin = null;yrittää {// Tämä käynnistää porttipalvelimen portissa ja vastaa HTTP 202: lla 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (palvelin, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);LuettelocallList = TestUtil.waitAndGetCallList (palvelin, 30);assertTrue ("GET-pyyntöä ei vastaanoteta RestClientiltä. Testi epäonnistui.",(callList! = null) && (callList.size () == 1));// Vahvista REST-asiakkaan GET-pyynnön otsikotKartta > headerFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET-pyyntö sisältää otsikon Hyväksy ja sen arvon",headersFromRequest.get ("Hyväksy"). sisältää ("teksti / html"));assertTrue ("GET-pyyntö sisältää otsikkovaltuutuksen ja sen arvon",headersFromRequest.get ("Valtuutus"). sisältää ("Siirtotie 1234567890qwertyuiop");assertTrue ("GET-pyyntö sisältää otsikon välimuistiohjauksen ja sen arvon",headersFromRequest.get ("Cache-Control"). sisältää ("no-cache"));assertTrue ("GET-pyyntö sisältää otsikkoyhteyden ja sen arvon",headersFromRequest.get ("Yhteys"). sisältää ("pidä hengissä"));assertTrue ("GET-pyyntö sisältää otsikon Content-Type ja sen arvon",headersFromRequest.get ("Content-Type"). sisältää ("application / json"));}saalis (poikkeus e) {e.printStackTrace ();epäonnistua ("Testi epäonnistui poikkeuksen vuoksi: + e);}lopulta {if (palvelin! = null) {server.stop ();}}}
/ *** Junit-testi POST-pyynnön vahvistamiseksi RestClientin rungolla ja otsikoilla* Askeleet:* 1) Luo tynkäpalvelin Restito-kehyksen avulla ja määritä se kuuntelemaan tietyssä portissa* 2) Käynnistä restClient-menetelmä sendPOSTRequestWithJSONBody (…)* 3) Restito tallentaa mahdolliset lähetetyt vastaavat POST-pyynnöt.* 4) Vahvista, jos Restito on kaapannut POST-pyyntöjä annetulle päätepisteelle* Odotettu käyttäytyminen:*> Restiton olisi pitänyt siepata POST-pyyntö ja sen olisi pitänyt kaapata vain yksi POST-pyyntö.*> Hae siepatun POST-pyynnön runko ja vahvista JSON-arvot* Lopuksi:*> Pysäytä itsepalvelin, joka aloitti restiton käytön.* /public void testPOSTRequestWithJSONBody () {StubServer-palvelin = null;yrittää {// Tämä käynnistää porttipalvelimen portissa ja vastaa HTTP 202: lla 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (palvelin, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);LuettelocallList = TestUtil.waitAndGetCallList (palvelin, 30);assertTrue ("POST-pyyntöä ei vastaanoteta RestClientiltä. Testi epäonnistui.",(callList! = null) && (callList.size () == 1));// Vahvista REST-asiakkaan GET-pyynnön otsikotMerkkijono requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = uusi JSONObject (requestBody);assertTrue ("jsonissa TimeUpdated on väärä",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Jsonin access_token on väärä",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Jsonin refresh_token on väärä",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Jsonin token_type on väärä",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("haltija"));assertTrue ("Jsonissa oleva expires_in on virheellinen",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Jsonin soveltamisala on väärä",postRequestJSON.get ("soveltamisala"). toString (). equalsIgnoreCase (""));}saalis (poikkeus e) {e.printStackTrace ();epäonnistua ("Testi epäonnistui poikkeuksen vuoksi: + e);}lopulta {if (palvelin! = null) {server.stop ();}}}}
========== JAVA-KOODI päättyy ===========
Edut Restito Frameworkin käytöstä REST-asiakastestauksessa
Tässä on Restito Framework for ReST -asiakastestauksen edut ja edut
- Emme tarvitse todellista REST-palvelinta kehitettäväksi REST-asiakkaan testaamiseen.
- Restito tarjoaa vahvat ja monipuoliset apuohjelmat ja menetelmät palvelimen erilaisen käyttäytymisen pilkkaamiseksi. Esimerkiksi: Voit testata REST-asiakkaan käyttäytymistä, kun palvelin vastaa HTTP 404- tai HTTP 503 -virheellä.
- Restito-palvelimet voidaan asettaa muutamassa millisekunnissa ja ne voidaan sulkea testien jälkeen.
- Restito tukee kaiken tyyppisiä HTTP-menetelmien sisältöjä, kuten pakattu, pakkaamaton, yhtenäinen, sovellus / teksti, sovellus / JSON jne.
Haittoja Restito Frameworkin käyttämiselle REST-asiakastestauksessa
Tässä ovat Restito Frameworkin haitat / haittapuolet ReST-asiakastestauksessa
- REST-asiakaslähdettä tulisi muokata, jotta "localhost" voidaan pitää palvelinkoneena.
- Palvelimen avaaminen missä tahansa portissa voi olla ristiriidassa, jos käytämme yleisesti käytettyä porttia, kuten '8080' tai '9443'.
- On suositeltavaa käyttää portteja, kuten 9092 tai 9099, joita muut työkalut eivät yleensä käytä.
Yhteenveto:
- REST on lyhenne sanoista "REpresentational State Transfer", joka on uusi vakiotapa yhteydenpitoon kahden järjestelmän välillä tiettynä ajankohtana.
- REST Client on menetelmä tai työkalu REST-palvelun sovellusliittymän kutsumiseksi, joka altistuu minkä tahansa järjestelmän tai palveluntarjoajan viestinnälle.
- RestServer-menetelmässä tai sovellusliittymässä, joka on alttiina minkä tahansa järjestelmän tai palveluntarjoajan viestinnälle.
- Restito on kevyt sovellus, joka auttaa sinua suorittamaan kaikenlaisia HTTP-pyyntöjä
- Luo HTTP-asiakas ja menetelmä lähettää HTTP GET -pyyntö mihin tahansa palvelimen päätepisteeseen
- Aloita Restito-palvelin kuuntelemaan ja sieppaamaan päätepisteelle getevents lähetetyt pyynnöt.
- Käynnistä Restito-palvelin kuunnellaksesi ja sieppaamalla päätepisteelle getevents lähetetyt pyynnöt localhostissa
- Tässä olemme toteuttaneet esimerkkejä vain REST-asiakkaan automaatiotestauksesta.
- Emme tarvitse todellista REST-palvelinta kehitettäväksi REST-asiakkaan testaamiseen.
- REST-asiakaslähdettä tulisi muokata, jotta "localhost" voidaan pitää palvelinkoneena.
Tämän artikkelin on kirjoittanut Chandrasekhar Muttineni