Apa itu REST?
REST adalah singkatan dari "REpresentational State Transfer," yang merupakan cara komunikasi baru antara dua sistem mana pun pada titik waktu tertentu. Salah satu sistem disebut 'REST Client', dan yang lainnya disebut 'REST Server'.
Dalam tutorial REST ini, Anda akan belajar:
- Apa itu REST?
- Apa itu REST Client?
- Apa itu REST Server?
- Apa itu Restito?
- Bagaimana cara menguji klien REST menggunakan Restito?
- Keuntungan menggunakan Restito Framework untuk pengujian klien REST
- Kekurangan menggunakan Restito Framework untuk pengujian klien REST
Sebelum mempelajari tentang Restito Framework untuk pengujian klien REST, pertama-tama mari kita pelajari beberapa dasar.
Apa itu REST Client?
REST Client adalah metode atau alat untuk memanggil API layanan REST yang diekspos untuk komunikasi oleh sistem atau penyedia layanan apa pun. Misalnya: jika API diekspos untuk mendapatkan informasi lalu lintas waktu nyata tentang rute dari Google, perangkat lunak / alat yang memanggil API lalu lintas Google disebut klien REST.
Apa itu REST Server?
Ini adalah metode atau API yang diekspos ke komunikasi oleh sistem atau penyedia layanan apa pun. Misalnya, Google memperlihatkan API untuk mendapatkan informasi lalu lintas waktu nyata pada rute tertentu.
Di sini, server Google harus aktif dan berjalan untuk mendengarkan permintaan apa pun ke API yang terekspos dari klien yang berbeda.
Contoh:
Saatnya untuk membuat skenario End-to-End lengkap dari definisi di atas.
Mari kita pertimbangkan aplikasi pemesanan taksi seperti Uber karena perusahaan membutuhkan informasi waktu nyata tentang situasi lalu lintas di sekitar rute tempat kendaraan tertentu berada.
Klien Istirahat:
Di sini klien adalah aplikasi seluler Uber yang digunakan pengemudi untuk login. Aplikasi ini mengirimkan permintaan ke REST API yang diekspos oleh peta Google untuk mendapatkan data waktu nyata. Misalnya, permintaan HTTP GET.
Server Istirahat:
Dalam contoh ini, Google adalah penyedia Layanan, dan API peta Google merespons dengan detail yang diperlukan untuk permintaan aplikasi Uber.
Baik klien dan server sama pentingnya dalam komunikasi REST.
Di sini, kami telah menerapkan contoh untuk pengujian otomatisasi hanya untuk Klien REST. Untuk menguji server REST, lihat 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 menjalankan segala jenis Permintaan HTTP. Anda dapat menggunakan Restito untuk menguji REST API Anda dan untuk mencari masalah di aplikasi atau jaringan Anda.
Bagaimana cara menguji klien REST menggunakan Restito?
Mari kita bagi latihannya menjadi 4 langkah berikut:
- Buat klien HTTP dan metode untuk mengirim permintaan HTTP GET ke titik akhir server mana pun. Untuk saat ini, pertimbangkan titik akhir sebagai http: // localhost: 9092 / getevents.
- Mulai server Restito untuk mendengarkan dan menangkap permintaan yang dikirim ke titik akhir 'getevents' di localhost http: // localhost: 9092 / getevents.
- Buat kelas pengujian untuk menguji klien di atas. Panggil metode 'sendGETRequest' klien HTTP untuk memulai permintaan GET ke 'getevents' API.
- Validasi panggilan HTTP GET menggunakan framework Restito.
Mari kita selami lebih dalam setiap langkah di atas.
Langkah 1) Buat klien HTTP dan metode untuk mengirim permintaan HTTP GET ke titik akhir server mana pun.
========== KODE JAWA Mulai ===========
paket com.chamlabs.restfulservices.client;import java.util.HashMap;import java.util.Map;impor org.apache.http.client.HttpClient;impor org.apache.http.client.methods.HttpGet;impor org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;impor org.apache.http.impl.client.HttpClientBuilder;import org.json.JSONObject;/ *** Kelas ini membuat Klien HTTP dan memiliki metode untuk mengirim permintaan HTTP GET:* sendGETRequest (…)* /kelas publik RestClient {/ *** Konstruktor untuk kelas RestClient* /publik RestClient () {System.out.println ("Membuat konstruktor RestClient");}/ *** Metode untuk Mengirim permintaan GET ke http: // localhost: <> / getevents* @ port param* @return true jika permintaan GET berhasil dikirim. Salah, sebaliknya.* /public static boolean sendGETRequest (int port) {coba {HttpClient client = HttpClientBuilder.create (). Build ();HttpGet getRequest = HttpGet baru ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (request);client.execute (getRequest);System.out.println ("Permintaan HTTP berhasil dikirim."+ "Mengembalikan Benar");kembali benar;}catch (Exception e) {e.printStackTrace ();}System.out.println ("Beberapa pengecualian telah terjadi selama pembuatan Klien HTTP."+ "Mengembalikan salah");return false;}}
========== KODE JAWA Berakhir ===========
Langkah 2) Mulai server Restito untuk mendengarkan dan menangkap permintaan yang dikirim ke 'getevents' titik akhir di localhost http: // localhost: 9092 / getevents.
========== KODE JAWA Mulai ===========
paket com.chamlabs.restfultesting.util;impor com.xebialabs.restito.builder.stub.StubHttp.whenHttp statis;impor com.xebialabs.restito.semantics.Action.status statis;impor com.xebialabs.restito.semantics.Condition.get statis;impor com.xebialabs.restito.semantics.Condition.post statis;import java.util.List;import org.glassfish.grizzly.http.util.HttpStatus;impor com.xebialabs.restito.semantics.Call;impor com.xebialabs.restito.server.StubServer;/ *** Kelas utilitas ini berisi beberapa metode utilitas seperti:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @ penulis cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /public class TestUtil {/ *** Metode utilitas untuk memulai server rintisan restito untuk menerima permintaan GET* @ server parameter* @ port param* Status @param* /public static void restartRestitoServerForGETRequests (server StubServer, port int, status HttpStatus){// Bunuh server restitojika (server! = null) {server.stop ();}// Inisialisasi dan konfigurasikan instance yang lebih baru dari server rintisanserver = StubServer baru (port) .run ();whenHttp (server) .match (get ("/ getevents")). lalu (status (status));}/ *** Metode utilitas untuk memulai server rintisan restito untuk menerima permintaan POST* @ server parameter* @ port param* Status @param* /public static void restartRestitoServerForPOSTRequests (server StubServer, int port, status HttpStatus){// Bunuh server restitojika (server! = null) {server.stop ();}// Inisialisasi dan konfigurasikan instance yang lebih baru dari server rintisanserver = StubServer baru (port) .run ();whenHttp (server) .match (post ("/ postevents")). lalu (status (status));}/ *** Untuk server rintisan restito tertentu, loop selama jumlah detik dan* istirahat dan kembalikan daftar panggilan dari server.** @ server parameter* @param waitTimeInSeconds* @ kembali* @throws InterruptedException* /Daftar statis publikwaitAndGetCallList (server StubServer, int waitTimeInSeconds)melempar InterruptedException{int timeoutCount = 0;Daftar callList = server.getCalls ();while (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {istirahat;}callList = server.getCalls ();}// Tunggu selama 2 detik untuk memasukkan semua panggilan ke callList untuk Menghilangkan omong kosong apa pun.Thread.sleep (2000);return server.getCalls ();}}
========== KODE JAWA Berakhir ===========
Langkah 3) Buat kelas pengujian untuk menguji klien di atas. Panggil metode sendGETRequest klien HTTP untuk memulai permintaan GET ke 'getevents' API.
========== KODE JAWA Mulai ===========
import junit.framework.TestCase;impor com.chamlabs.restfulservices.client.RestClient;import com.chamlabs.restfultesting.util.TestUtil;impor com.xebialabs.restito.semantics.Call;impor com.xebialabs.restito.server.StubServer;impor statis org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;import org.json.JSONObject;import java.util.List;import java.util.Map;/ *** Kelas ini berisi beberapa tes junit untuk memvalidasi operasi RestClient seperti:* sendRequest (…)* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /kelas publik RestClientTester memperluas TestCase {private static final Integer PORT = 9098;private static final Integer PORT2 = 9099;private static final Integer PORT3 = 9097;public RestClientTester () {System.out.println ("Memulai pengujian RestClientTester");}/ *** Tes Junit untuk memvalidasi permintaan GET dari RestClient* Langkah:* 1) Buat server rintisan menggunakan kerangka kerja Restito dan konfigurasikan untuk mendengarkan pada port yang diberikan* 2) Jalankan metode sendGETRequest (…) dari RestClient* 3) Restito menangkap permintaan GET yang cocok yang dikirim, jika ada.* 4) Validasi jika Restito telah menangkap permintaan GET apa pun pada titik akhir yang diberikan* Perilaku yang Diharapkan:*> Restito seharusnya menangkap permintaan GET dan seharusnya hanya menangkap satu permintaan GET.* Akhirnya:*> Hentikan server rintisan mulai menggunakan restito.* /public void testGETRequestFromClient () {Server StubServer = null;coba {// Ini akan memulai server rintisan di 'PORT' dan merespons dengan HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);DaftarcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("GET request tidak diterima dari RestClient. Test gagal.",(callList! = null) && (callList.size () == 1));}catch (Exception e) {e.printStackTrace ();gagal ("Tes Gagal karena pengecualian: + e);}akhirnya {if (server! = null) {server.stop ();}}}
========== KODE JAWA Berakhir ===========
Langkah 4) Bagaimana memvalidasi permintaan GET dengan Header dan permintaan POST dengan tubuh menggunakan kerangka kerja Restito.
========== KODE JAWA Mulai ===========
/ *** Tes Junit untuk memvalidasi permintaan GET dengan header dari RestClient* Langkah:* 1) Buat server rintisan menggunakan kerangka kerja Restito dan konfigurasikan untuk mendengarkan pada port yang diberikan* 2) Jalankan metode sendGETRequestWithCustomHeaders (…) dari RestClient* 3) Restito menangkap permintaan GET yang cocok yang dikirim, jika ada.* 4) Validasi jika Restito telah menangkap permintaan GET apa pun pada titik akhir tertentu* Perilaku yang Diharapkan:*> Restito seharusnya menangkap permintaan GET, dan seharusnya hanya menangkap satu permintaan GET.*> Dapatkan header permintaan GET yang diambil* dan pastikan tajuk cocok dengan yang dikonfigurasi.* Akhirnya:*> Hentikan server rintisan mulai menggunakan restito.* /public void testGETRequestWithHeadersFromClient () {Server StubServer = null;coba {// Ini akan memulai server rintisan di 'PORT' dan merespons dengan HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (server, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);DaftarcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("GET request tidak diterima dari RestClient. Test gagal.",(callList! = null) && (callList.size () == 1));// Validasi header permintaan GET dari REST ClientPeta > headersFromRequest = callList.get (0) .getHeaders ();assertTrue ("GET request berisi header Accept dan nilainya",headersFromRequest.get ("Terima"). berisi ("text / html"));assertTrue ("GET request berisi Otorisasi header dan nilainya",headersFromRequest.get ("Authorization"). contains ("Bearer 1234567890qwertyuiop"));assertTrue ("GET request berisi header Cache-Control dan nilainya",headersFromRequest.get ("Cache-Control"). contains ("no-cache"));assertTrue ("GET request berisi header Connection dan nilainya",headersFromRequest.get ("Sambungan"). berisi ("tetap hidup"));assertTrue ("GET request berisi header Content-Type dan nilainya",headersFromRequest.get ("Content-Type"). contains ("application / json"));}catch (Exception e) {e.printStackTrace ();gagal ("Tes Gagal karena pengecualian: + e);}akhirnya {if (server! = null) {server.stop ();}}}
/ *** Tes Junit untuk memvalidasi permintaan POST dengan isi dan header dari RestClient* Langkah:* 1) Buat server rintisan menggunakan kerangka kerja Restito dan konfigurasikan untuk mendengarkan pada port yang diberikan* 2) Panggil metode sendPOSTRequestWithJSONBody (…) dari RestClient* 3) Restito menangkap permintaan POST yang sesuai yang dikirim, jika ada.* 4) Validasi jika Restito telah menangkap permintaan POST apa pun pada titik akhir yang diberikan* Perilaku yang Diharapkan:*> Restito seharusnya menangkap permintaan POST dan seharusnya hanya menangkap satu permintaan POST.*> Dapatkan isi permintaan POST yang diambil dan validasi nilai JSON* Akhirnya:*> Hentikan server rintisan mulai menggunakan restito.* /public void testPOSTRequestWithJSONBody () {Server StubServer = null;coba {// Ini akan memulai server rintisan di 'PORT' dan merespons dengan HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (server, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);DaftarcallList = TestUtil.waitAndGetCallList (server, 30);assertTrue ("Permintaan POST tidak diterima dari RestClient. Pengujian gagal.",(callList! = null) && (callList.size () == 1));// Validasi header permintaan GET dari REST ClientString requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = JSONObject baru (requestBody);assertTrue ("The timeUpdated in json is wrong",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));assertTrue ("Access_token di json salah",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));assertTrue ("Refresh_token di json salah",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));assertTrue ("Token_type di json salah",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bearer"));assertTrue ("Expires_in di json salah",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));assertTrue ("Cakupan di json salah",postRequestJSON.get ("scope"). toString (). equalsIgnoreCase (""));}catch (Exception e) {e.printStackTrace ();gagal ("Tes Gagal karena pengecualian: + e);}akhirnya {if (server! = null) {server.stop ();}}}}
========== KODE JAWA Berakhir ===========
Keuntungan menggunakan Restito Framework untuk pengujian klien REST
Di sini, adalah pro / manfaat dari Restito Framework untuk pengujian klien ReST
- Kami tidak memerlukan server REST yang sebenarnya untuk dikembangkan untuk menguji Klien REST.
- Restito menyediakan utilitas dan metode yang kuat dan beragam untuk meniru perilaku Server yang berbeda. Misalnya: Untuk menguji bagaimana klien REST berperilaku saat Server merespons dengan kesalahan HTTP 404 atau kesalahan HTTP 503.
- Server Restito dapat disiapkan dalam beberapa milidetik dan dapat dihentikan setelah pengujian selesai.
- Restito mendukung semua jenis konten metode HTTP seperti terkompresi, tidak terkompresi, bersatu, aplikasi / teks, aplikasi / JSON, dll.
Kekurangan menggunakan Restito Framework untuk pengujian klien REST
Berikut adalah kekurangan / kekurangan dari Restito Framework untuk pengujian klien ReST
- Sumber klien REST harus disesuaikan untuk mempertimbangkan 'localhost' sebagai mesin server.
- Membuka server di port mana pun dapat menimbulkan konflik jika kami menggunakan beberapa port yang umum digunakan seperti '8080' atau '9443' dll.
- Disarankan untuk menggunakan porta seperti 9092 atau 9099, yang tidak umum digunakan oleh alat lain.
Ringkasan:
- REST adalah singkatan dari "REpresentational State Transfer" yang merupakan cara komunikasi standar baru antara dua sistem mana pun pada titik waktu tertentu.
- REST Client adalah metode atau alat untuk memanggil API layanan REST yang diekspos ke komunikasi oleh sistem atau penyedia layanan apa pun.
- Dalam metode RestServer atau API yang diekspos untuk komunikasi oleh sistem atau penyedia layanan apa pun.
- Restito adalah aplikasi ringan untuk membantu Anda menjalankan segala jenis Permintaan HTTP
- Buat klien HTTP dan metode untuk mengirim permintaan HTTP GET ke titik akhir server mana pun
- Mulai server Restito untuk mendengarkan dan menangkap permintaan yang dikirim ke 'getevents' titik akhir.
- Mulai server Restito untuk mendengarkan dan menangkap permintaan yang dikirim ke 'getevents' titik akhir di localhost
- Di sini, kami telah menerapkan contoh untuk pengujian otomatisasi hanya untuk Klien REST.
- Kami tidak memerlukan server REST yang sebenarnya untuk dikembangkan untuk menguji Klien REST.
- Sumber klien REST harus disesuaikan untuk mempertimbangkan 'localhost' sebagai mesin server.
Artikel ini dikontribusikan oleh Chandrasekhar Muttineni