Ujian Pelanggan REST menggunakan Restito Tool

Isi kandungan:

Anonim

Apa itu REST?

REST adalah singkatan dari "Representational State Transfer," yang merupakan cara komunikasi baru antara dua sistem pada satu masa tertentu. Salah satu sistem tersebut dipanggil 'REST Client,' dan yang lain disebut 'REST Server'.

Dalam tutorial REST ini, anda akan belajar:

  • Apa itu REST?
  • Apa itu Pelanggan REST?
  • Apakah REST Server?
  • Apa itu Restito?
  • Bagaimana untuk menguji klien REST menggunakan Restito?
  • Kelebihan menggunakan Restito Framework untuk ujian klien REST
  • Kelemahan penggunaan Restito Framework untuk ujian klien REST

Sebelum mengetahui mengenai Restito Framework untuk ujian klien REST, mari kita pelajari terlebih dahulu beberapa asas.

Apa itu Pelanggan REST?

Pelanggan REST adalah kaedah atau alat untuk menggunakan API perkhidmatan REST yang terdedah untuk komunikasi oleh mana-mana sistem atau penyedia perkhidmatan. Contohnya: jika API terdedah untuk mendapatkan maklumat lalu lintas masa nyata mengenai laluan dari Google, perisian / alat yang memanggil API lalu lintas Google disebut klien REST.

Apakah REST Server?

Ini adalah kaedah atau API yang terdedah kepada komunikasi oleh mana-mana sistem atau penyedia perkhidmatan. Sebagai contoh, Google mendedahkan API untuk mendapatkan maklumat lalu lintas masa nyata pada laluan tertentu.

Di sini, pelayan Google perlu aktif dan aktif untuk mendengarkan sebarang permintaan ke API yang terdedah dari klien yang berbeza.

Contoh:

Sudah tiba masanya untuk membuat senario End-to-End yang lengkap dari definisi di atas.

Mari kita pertimbangkan aplikasi tempahan teksi seperti Uber kerana syarikat memerlukan maklumat masa nyata mengenai keadaan lalu lintas di sekitar laluan di mana kenderaan tertentu berada.

Pelanggan Rehat:

Di sini pelanggan adalah aplikasi mudah alih Uber yang dilog masuk oleh pemandu. Aplikasi ini mengirimkan permintaan ke REST API yang didedahkan oleh peta Google untuk mendapatkan data masa nyata. Contohnya, permintaan HTTP GET.

Pelayan Rehat:

Dalam contoh ini, Google adalah penyedia Perkhidmatan, dan API peta Google bertindak balas dengan perincian yang diperlukan untuk permintaan aplikasi Uber.

Pelanggan dan pelayan sama pentingnya dalam komunikasi REST.

Di sini, kami telah melaksanakan contoh untuk ujian automasi hanya Pelanggan REST. Untuk menguji pelayan REST, rujuk https://www.guru99.com/top-6-api-testing-tool.html.

Apa itu Restito?

Restito adalah kerangka kerja yang dikembangkan oleh Mkotsur. Ini adalah aplikasi ringan untuk membantu anda melaksanakan Permintaan HTTP apa pun. Anda dapat menggunakan Restito untuk menguji REST API dan mencari masalah dalam aplikasi atau rangkaian anda.

Bagaimana untuk menguji klien REST menggunakan Restito?

Mari kita bahagikan latihan kepada 4 langkah berikut:

  1. Buat klien dan kaedah HTTP untuk mengirim permintaan HTTP GET ke mana-mana titik akhir pelayan. Buat masa ini, anggap titik akhir sebagai http: // localhost: 9092 / getevents.
  1. Mulakan pelayan Restito untuk mendengar dan menangkap permintaan yang dihantar ke titik akhir 'getevents' di localhost http: // localhost: 9092 / getevents.
  1. Buat kelas ujian untuk menguji klien di atas. Memohon kaedah 'sendGETRequest' klien HTTP untuk memulakan permintaan GET ke 'getevents' API.
  1. Sahkan panggilan HTTP GET menggunakan kerangka Restito.

Mari kita selami setiap langkah di atas.

Langkah 1) Buat klien dan kaedah HTTP untuk mengirim permintaan HTTP GET ke mana-mana titik akhir pelayan.

========== KOD JAVA Bermula ===========

pakej 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;/ *** Kelas ini membuat Klien HTTP dan mempunyai kaedah untuk mengirim permintaan HTTP GET:* sendGETRequest (…)* /RestClient kelas awam {/ *** Pembina untuk RestClient kelas* /Pelanggan Rehat awam () {System.out.println ("Membuat pembangun RestClient");}/ *** Kaedah untuk menghantar permintaan GET ke http: // localhost: <
> / getevents* Pelabuhan @param* @kembali betul jika permintaan GET berjaya dihantar. Salah, sebaliknya.* /sendGETRequest boolean statik awam (int port) {cuba {Pelanggan HttpClient = HttpClientBuilder.create (). Build ();HttpGet getRequest = HttpGet baru ("http: // localhost: + port + "/ getevents");// HttpResponse respons = client.execute (permintaan);client.execute (getRequest);System.out.println ("Permintaan HTTP berjaya dihantar."+ "Kembali Benar");kembali benar;}tangkapan (Pengecualian e) {e.printStackTrace ();}System.out.println ("Beberapa pengecualian telah berlaku semasa pembuatan HTTP Client."+ "Kembali palsu");kembali palsu;}}

========== KOD JAVA Berakhir ===========

Langkah 2) Mulakan pelayan Restito untuk mendengar dan menangkap permintaan yang dihantar ke titik akhir 'getevents' di localhost http: // localhost: 9092 / getevents.

========== KOD JAVA Bermula ===========

pakej com.chamlabs.restfultesting.util;import com statik.xebialabs.restito.builder.stub.StubHttp.whenHttp;import com statik.xebialabs.restito.semantics.Action.status;import com.xebialabs.restito.semantics.Condition.get statik;import com statik.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;/ *** Kelas utiliti ini mengandungi beberapa kaedah utiliti seperti:* mulakan semulaRestitoServerForGETRequests (…)* mulakan semulaRestitoServerForPOSTRequests (…)* tungguAndGetCallList (…)** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /TestUtil kelas awam {/ *** Kaedah utiliti untuk memulakan restito stub server untuk menerima permintaan GET* pelayan @param* Pelabuhan @param* Status @param* /restart kekosongan statik awamRestitoServerForGETRequests (pelayan StubServer, int port, status HttpStatus){// Bunuh pelayan restitojika (pelayan! = null) {pelayan.stop ();}// Memulakan dan mengkonfigurasi contoh pelayan stub yang lebih barupelayan = StubServer baru (port). jalankan ();whenHttp (server) .match (get ("/ getevents")). kemudian (status (status));}/ *** Kaedah utiliti untuk memulakan restito stub server untuk menerima permintaan POST* pelayan @param* Pelabuhan @param* Status @param* /restart kekosongan statik awamRestitoServerForPOSTRequests (pelayan StubServer, port int, status HttpStatus){// Bunuh pelayan restitojika (pelayan! = null) {pelayan.stop ();}// Memulakan dan mengkonfigurasi contoh pelayan stub yang lebih barupelayan = StubServer baru (port). jalankan ();whenHttp (server) .match (post ("/ postevents")). kemudian (status (status));}/ *** Untuk pelayan restito stub tertentu, gelung dengan jumlah detik yang diberikan dan* putus dan kembalikan senarai panggilan dari pelayan.** pelayan @param* @param tungguTimeInSeconds* @kembali* @throws InterruptException* /Senarai statik awam  waitingAndGetCallList (pelayan StubServer, int waitingTimeInSeconds)melemparkan InterruptException{int timeoutCount = 0;Senaraikan  callList = server.getCalls ();sementara (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = tungguTimeInSeconds) {rehat;}callList = server.getCalls ();}// Tunggu selama 2 saat untuk memasukkan semua panggilan ke dalam CallList untuk Menghilangkan kekaburan.Thread.sleep (2000);kembali pelayan.getCalls ();}}

========== KOD JAVA Berakhir ===========

Langkah 3) Buat kelas ujian untuk menguji klien di atas. Memohon kaedah HTTP klien sendGETRequest untuk memulakan permintaan GET ke API 'getevents'

========== KOD JAVA Bermula ===========

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 statik.grizzly.http.util.HttpStatus.ACCEPTED_202 statik;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Kelas ini mengandungi beberapa ujian junit untuk mengesahkan operasi RestClient seperti:* sendRequest (…)* sendRequestWithCustomHeaders (…)* hantarPOSTRequestWithJSONBody (…)** /RestClientTester kelas awam memperluas TestCase {PORT Integer akhir statik persendirian = 9098;Pegangan Integer akhir statik persendirian PORT2 = 9099;Pegangan Integer akhir statik persendirian PORT3 = 9097;RestClientTester awam () {System.out.println ("Memulakan ujian RestClientTester");}/ *** Ujian Junit untuk mengesahkan permintaan GET dari RestClient* Langkah-langkah:* 1) Buat pelayan rintisan menggunakan kerangka Restito dan konfigurasikan untuk mendengarkan pada port yang diberikan* 2) Memohon kaedah sendGETRequest (…) RestClient* 3) Restito menangkap permintaan GET yang sesuai yang dikirim, jika ada.* 4) Sahkan jika Restito telah menangkap permintaan GET pada titik akhir yang diberikan* Tingkah Laku yang Dijangkakan:*> Restito seharusnya menangkap permintaan GET dan seharusnya hanya menangkap satu permintaan GET.* Akhirnya:*> Hentikan pelayan rintangan mula menggunakan restito.* /ujian kekosongan awamGETRequestFromClient () {Pelayan StubServer = null;cuba {// Ini akan memulakan pelayan rintisan pada 'PORT' dan bertindak balas dengan HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (pelayan, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Senarai  callList = TestUtil.waitAndGetCallList (pelayan, 30);assertTrue ("Permintaan GET tidak diterima dari RestClient. Ujian gagal.",(callList! = null) && (callList.size () == 1));}tangkapan (Pengecualian e) {e.printStackTrace ();gagal ("Ujian Gagal kerana pengecualian: + e);}akhirnya {jika (pelayan! = null) {pelayan.stop ();}}}

========== KOD JAVA Berakhir ===========

Langkah 4) Cara mengesahkan permintaan GET dengan Header dan permintaan POST dengan badan menggunakan kerangka Restito.

========== KOD JAVA Bermula ===========

/ *** Ujian Junit untuk mengesahkan permintaan GET dengan tajuk dari RestClient* Langkah-langkah:* 1) Buat pelayan rintisan menggunakan kerangka Restito dan konfigurasikan untuk mendengarkan pada port yang diberikan* 2) Memohon kaedah sendGETRequestWithCustomHeaders (…) RestClient* 3) Restito menangkap permintaan GET yang sesuai yang dikirim, jika ada.* 4) Sahkan jika Restito telah menangkap permintaan GET pada titik akhir tertentu* Tingkah Laku yang Dijangkakan:*> Restito seharusnya menangkap permintaan GET, dan seharusnya hanya menangkap satu permintaan GET.*> Dapatkan tajuk permintaan GET yang ditangkap* dan pastikan tajuk sesuai dengan yang dikonfigurasi.* Akhirnya:*> Hentikan pelayan rintangan mula menggunakan restito.* /ujian kekosongan awamGETRequestWithHeadersFromClient () {Pelayan StubServer = null;cuba {// Ini akan memulakan pelayan rintisan pada 'PORT' dan bertindak balas dengan HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (pelayan, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Senarai  callList = TestUtil.waitAndGetCallList (pelayan, 30);assertTrue ("Permintaan GET tidak diterima dari RestClient. Ujian gagal.",(callList! = null) && (callList.size () == 1));// Mengesahkan tajuk permintaan GET dari REST ClientPeta > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("Permintaan GET mengandungi tajuk Terima dan nilainya",headersFromRequest.get ("Terima"). mengandungi ("teks / html"));assertTrue ("Permintaan GET mengandungi Header Authorization dan nilainya",headersFromRequest.get ("Keizinan"). mengandungi ("Pembawa 1234567890qwertyuiop"));assertTrue ("Permintaan GET mengandungi header Cache-Control dan nilainya",headersFromRequest.get ("Cache-Control"). mengandungi ("no-cache"));assertTrue ("Permintaan GET mengandungi Sambungan tajuk dan nilainya",headersFromRequest.get ("Connection"). mengandungi ("terus hidup"));assertTrue ("Permintaan GET mengandungi tajuk Content-Type dan nilainya",headersFromRequest.get ("Content-Type"). mengandungi ("application / json"));}tangkapan (Pengecualian e) {e.printStackTrace ();gagal ("Ujian Gagal kerana pengecualian: + e);}akhirnya {jika (pelayan! = null) {pelayan.stop ();}}}
/ *** Ujian Junit untuk mengesahkan permintaan POST dengan isi dan tajuk dari RestClient* Langkah-langkah:* 1) Buat pelayan rintisan menggunakan kerangka Restito dan konfigurasikan untuk mendengarkan pada port yang diberikan* 2) Memohon kaedah sendPOSTRequestWithJSONBody (…) RestClient* 3) Restito menangkap permintaan POST yang sesuai yang dikirimkan, jika ada.* 4) Sahkan jika Restito telah menangkap permintaan POST pada titik akhir yang diberikan* Tingkah Laku yang Dijangkakan:*> Restito seharusnya menangkap permintaan POST dan seharusnya hanya menangkap satu permintaan POST.*> Dapatkan isi permintaan POST yang diambil dan sahkan nilai JSON* Akhirnya:*> Hentikan pelayan rintangan mula menggunakan restito.* /ujian kekosongan awamPOSTRequestWithJSONBody () {Pelayan StubServer = null;cuba {// Ini akan memulakan pelayan rintisan pada 'PORT' dan bertindak balas dengan HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (pelayan, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Senarai  callList = TestUtil.waitAndGetCallList (pelayan, 30);assertTrue ("Permintaan POST tidak diterima dari RestClient. Ujian gagal.",(callList! = null) && (callList.size () == 1));// Mengesahkan tajuk permintaan GET dari REST ClientString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = JSONObject baru (requestBody);assertTrue ("Masa yang dikemas kini dalam json tidak betul",postRequestJSON.get ("timeUpdated"). toString (). samaIgnoreCase ("1535703838478"));assertTrue ("Access_token dalam json tidak betul",postRequestJSON.get ("access_token"). toString ().sama denganIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Penyegaran_token dalam json tidak betul",postRequestJSON.get ("refresh_token"). toString ().sama denganIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Jenis token dalam json tidak betul",postRequestJSON.get ("token_type"). toString (). EqualIgnoreCase ("bearer"));assertTrue ("The expires_in in json tidak betul",postRequestJSON.get ("expires_in"). toString (). samaIgnoreCase ("1024"));assertTrue ("Skop dalam json tidak betul",postRequestJSON.get ("lingkup"). toString (). samaIgnoreCase (""));}tangkapan (Pengecualian e) {e.printStackTrace ();gagal ("Ujian Gagal kerana pengecualian: + e);}akhirnya {jika (pelayan! = null) {pelayan.stop ();}}}}

========== KOD JAVA Berakhir ===========

Kelebihan menggunakan Restito Framework untuk ujian klien REST

Berikut adalah kebaikan / faedah Restito Framework untuk ujian pelanggan ReST

  • Kami tidak memerlukan pelayan REST sebenar untuk dibangunkan untuk menguji Pelanggan REST.
  • Restito menyediakan utiliti dan kaedah yang kuat dan bervariasi untuk mengejek tingkah laku pelayan yang berbeza. Contohnya: Untuk menguji bagaimana klien REST berkelakuan ketika Server bertindak balas dengan ralat HTTP 404 atau ralat HTTP 503.
  • Pelayan restito dapat disediakan dalam beberapa milisaat dan dapat ditamatkan setelah ujian selesai.
  • Restito menyokong semua jenis kandungan kaedah HTTP seperti dimampatkan, tidak dimampatkan, disatukan, aplikasi / teks, aplikasi / JSON, dll.

Kelemahan penggunaan Restito Framework untuk ujian klien REST

Berikut, adalah kekurangan / kekurangan Restito Framework untuk ujian klien ReST

  • Sumber pelanggan REST harus diubah untuk menganggap 'localhost' sebagai mesin pelayan.
  • Membuka pelayan di mana-mana port mungkin bertentangan jika kita menggunakan beberapa port yang biasa digunakan seperti '8080' atau '9443' dll.
  • Sebaiknya gunakan port seperti 9092 atau 9099, yang tidak biasa digunakan oleh alat lain.

Ringkasan:

  • REST adalah singkatan dari "REpresentational State Transfer" yang merupakan kaedah komunikasi standard baru antara kedua-dua sistem pada satu masa tertentu.
  • Klien REST adalah kaedah atau alat untuk menggunakan API perkhidmatan REST yang terdedah kepada komunikasi oleh mana-mana sistem atau penyedia perkhidmatan.
  • Dalam kaedah RestServer atau API yang didedahkan untuk komunikasi oleh mana-mana sistem atau penyedia perkhidmatan.
  • Restito adalah aplikasi ringan untuk membantu anda melaksanakan Permintaan HTTP apa pun
  • Buat klien dan kaedah HTTP untuk mengirim permintaan HTTP GET ke mana-mana titik akhir pelayan
  • Mulakan pelayan Restito untuk mendengar dan menangkap permintaan yang dihantar ke 'getevents' titik akhir.
  • Mulakan pelayan Restito untuk mendengar dan menangkap permintaan yang dihantar ke titik akhir 'getevents' di localhost
  • Di sini, kami telah melaksanakan contoh untuk ujian automasi hanya Pelanggan REST.
  • Kami tidak memerlukan pelayan REST sebenar untuk dibangunkan untuk menguji Pelanggan REST.
  • Sumber pelanggan REST harus diubah untuk menganggap 'localhost' sebagai mesin pelayan.

Artikel ini disumbangkan oleh Chandrasekhar Muttineni