Tutorial Pengujian API REST Assured
⚡ Ringkasan Cerdas
REST Assured memposisikan dirinya sebagai sebuah JavaSebuah pustaka sumber terbuka berbasis yang menyederhanakan pengujian otomatisasi REST API. Kerangka kerja ini memberdayakan para insinyur kualitas untuk memvalidasi respons JSON yang kompleks, header, kode status, dan waktu respons menggunakan sintaks bergaya BDD yang bersih dengan integrasi Maven yang mulus.

Apa itu Yakin?
Yakinlah memungkinkan Anda menguji REST API menggunakan pustaka Java dan terintegrasi dengan baik dengan Maven. Alat ini memiliki teknik pencocokan yang sangat efisien, sehingga memastikan hasil yang Anda harapkan juga cukup mudah. Rest Assured memiliki metode untuk mengambil data dari hampir setiap bagian permintaan dan respons, tidak peduli seberapa rumit struktur JSON-nya.
Bagi komunitas pengujian, Pengujian Otomatisasi API masih baru dan khusus. Kompleksitas JSON membuat pengujian API belum banyak dieksplorasi. Namun, hal itu tidak membuatnya kurang penting dalam proses pengujian. Kerangka kerja Rest Assured.io telah membuatnya sangat sederhana dengan menggunakan dasar-dasar inti Java, sehingga menjadikannya hal yang sangat diinginkan untuk dipelajari.
Mengapa perlu Yakin?
Bayangkan Anda membuka Google Lihat peta dan cari tempat yang ingin Anda tuju. Anda langsung melihat restoran terdekat, pilihan transportasi dari penyedia perjalanan terkemuka, dan banyak pilihan lainnya di ujung jari Anda. Kita semua tahu bahwa ini bukanlah Google produk, jadi bagaimana caranya Google Bagaimana cara menampilkannya? Sistem ini menggunakan API yang tersedia dari penyedia tersebut. Nah, jika Anda diminta untuk menguji pengaturan semacam ini, bahkan sebelum UI dibangun atau sedang dalam pengembangan, pengujian API menjadi sangat penting. Mengujinya berulang kali dengan kombinasi data yang berbeda menjadikannya kasus yang sangat cocok untuk otomatisasi.
Sebelumnya, tim menggunakan bahasa dinamis seperti Groovy dan Ruby untuk mencapai hal ini, dan itu merupakan tantangan. Oleh karena itu, pengujian API tidak banyak dieksplorasi oleh penguji fungsional.
Namun, dengan Rest Assured, pengujian otomatis API dan pengiriman permintaan HTTPS sederhana dengan kustomisasi yang ramah pengguna menjadi mudah jika seseorang memiliki latar belakang dasar tentang JavaIni sangat membantu untuk memahami pengujian API dan pengujian integrasi. Rest Assured memberikan kepercayaan yang kuat pada backend, sementara penguji front-end dapat fokus pada UI dan operasi sisi klien. Rest Assured bersifat open source, dan penambahan metode serta pustaka secara terus-menerus menjadikannya pilihan yang tepat untuk otomatisasi API.
Tenang saja vs Postman: Perbedaan Utama
Baik REST Assured dan Postman Memvalidasi API REST, namun masing-masing sesuai dengan tahapan siklus pengujian yang berbeda. Memilih alat yang tepat bergantung pada keterampilan tim Anda, ruang lingkup proyek, dan kebutuhan integrasi.
| Aspek | Tenanglah | Postman |
|---|---|---|
| Tipe | Java pustaka untuk otomatisasi berbasis kode | Klien API berbasis GUI dengan dukungan scripting. |
| Kasus Penggunaan Terbaik | Pipeline integrasi berkelanjutan dan rangkaian regresi | Eksplorasi manual dan pengecekan API cepat |
| Persyaratan Keterampilan | Core Java pengetahuan yang dibutuhkan | Pengkodean minimal; menggunakan JavaCuplikan skrip |
| Pelaporan | Terintegrasi dengan TestNG, JUnitdan Allure | Ringkasan eksekusi bawaan melalui CLI Newman |
Banyak tim menggunakan Postman untuk prototipe awalping dan beralih ke REST Assured untuk pengujian regresi otomatis setelah API selesai.tract menjadi stabil.
Cara Mengatur Rest Assured.io dengan Eclipse
Pengaturan REST Assured melibatkan tiga ketergantungan inti: Java, sebuah IDE, dan Maven. Ikuti langkah-langkah di bawah ini untuk menghindari kesalahan build di kemudian hari.
Langkah 1) Instal Java. Lihat ini membimbing
Langkah 2) Unduh IDE untuk memulai: gerhana
Langkah 3) Instal Maven dan atur Eclipse Anda. Lihat di sini.
Pengaturan Yakinlah
- Buat Proyek Maven di IDE Anda. Kami menggunakan IntelliJ, tetapi Anda akan mendapatkan struktur yang serupa di IDE mana pun yang Anda gunakan.
- Buka file POM.xml Anda.
Struktur proyek untuk ruang kerja Maven yang menggunakan REST Assured.
Untuk Yakinlah.io: Untuk Java versi <9 pengguna:
Tambahkan ketergantungan di bawah ini ke POM.xml Anda:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Untuk Yakinlah.io: Untuk Java Pengguna versi 9+:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Penyelesaian masalah:
Jika Anda melihat kesalahan dan tidak yakin apakah dependensi telah diunduh dengan benar, ikuti langkah-langkah berikut:
- Lakukan build Maven untuk mengimpor semua dependensi. Anda akan menemukan bantuan tentang pengaturan Maven di [tautan]. Guru99.
- Jika kesalahan masih berlanjut, jalankan perintah `Maven clean` diikuti dengan `Maven install`. Proses build seharusnya selesai tanpa kesalahan.
- Tambahkan impor di bawah ini ke dalam Java kelas dan pastikan tidak ada kesalahan kompilasi.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Skrip Yakinlah sederhana pertama
Dengan semua dependensi yang sudah tersedia, Anda sekarang dapat menulis skrip pertama Anda. Kerangka kerja ini mengikuti gaya Behavior-Driven Development (BDD) yang hampir seperti bahasa Inggris.
sintaks:
Sintaks Rest Assured.io adalah bagian yang paling mudah dibaca dari kerangka kerja ini, karena sangat mirip dengan BDD (Behavior-Driven Development) dan mudah dipahami.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x", "y", equalTo("z"));
Penjelasan:
| Code | Penjelasan |
|---|---|
| Diberikan() | Kata kunci 'Given' memungkinkan Anda untuk mengatur latar belakang. Di sini, Anda memberikan header permintaan, parameter query dan path, body, dan cookie. Ini opsional jika item-item ini tidak diperlukan dalam permintaan. |
| Kapan() | Kata kunci 'when' menandai premis skenario Anda. Misalnya, 'when' Anda mendapatkan/mengirim/menaruh sesuatu, lakukan sesuatu yang lain. |
| Metode() | Gantikan ini dengan salah satu operasi CRUD (get/post/put/delete). |
| Kemudian() | Kondisi assert dan matcher Anda ada di sini. |
Sekarang setelah Anda memiliki pengaturan dan beberapa latar belakang tentang sintaksisnya, mari kita buat tes sederhana pertama kita. Tidak apa-apa jika strukturnya tampak baru bagi Anda, seiring Anda terus menulis kode dan menafsirkan setiap baris, Anda akan terbiasa.
Apa yang akan kamu ambil?
Buka browser Anda dan tekan – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Pastikan Anda melihat sesuatu seperti di bawah ini.
Contoh respons API yang ditangkap oleh REST Assured
Jika Anda mendapatkan kesalahan di browser saat mencoba mendapatkan respons untuk permintaan tersebut:
- Periksa apakah Anda menggunakan HTTPS atau HTTP. Browser Anda mungkin memiliki pengaturan yang memblokir situs web yang tidak aman.
- Periksa apakah ada proxy atau firewall yang memblokir browser Anda untuk membuka situs web tersebut.
*Note – Anda tidak menggunakan header, body, atau cookie apa pun di sini. Itu adalah URL, dan Anda mendapatkan konten dari API, bukan memposting atau memperbarui konten yang sudah ada. Itu berarti ini adalah panggilan GET. Ingat ini untuk memahami tes pertama kita dengan lebih baik.
Tujuan tes Anda:
Tujuan skrip ini adalah untuk mencetak keluaran yang sama di konsol IDE Anda seperti yang Anda terima di browser melalui Yakinlah.
Mari kita kodekan ini dengan langkah-langkah di bawah ini:
Mendapatkan respon Badan
Langkah 1) Buat kelas bernama “myFirstRestAssuredClass”.
Langkah 2) Buat sebuah metode bernama “getResponseBody”.
Langkah 3) Mirip dengan struktur yang telah dipelajari sebelumnya yaitu given, when, dan then, ketik kode di bawah ini:
diberikan(). -> Tidak diperlukan header, tidak diperlukan parameter kueri atau jalur.
ketika(). -> Tidak ada pengaturan kondisi khusus.
mendapatkan('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> hanya itu URL perlu dipasok.
lalu(). -> Tidak diperlukan pernyataan khusus.
log().all() -> Setelah semua respons diambil, catat respons, header, dan pada dasarnya semua yang dikembalikan oleh permintaan tersebut.
public static void getResponseBody(){
given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
.all();
}
Sekarang perhatikan bahwa URL Kode yang digunakan panjang dan kurang mudah dibaca. Jika diperhatikan lebih teliti, Anda akan melihat bahwa ada 3 parameter kueri yang digunakan:
- ID Pelanggan
- Kata Sandi
- No rekening
Rest Assured membantu kita meneruskan setiap bagian (query, path, header param) secara terpisah, sehingga kode menjadi lebih mudah dibaca dan dipelihara. Selain itu, kita dapat memparameterisasi data dari file eksternal sesuai kebutuhan.
Untuk menggunakan parameter kueri, kita kembali ke definisi sintaksis dan melihat bahwa semuanya diteruskan sebagai bagian dari yang diberikan.
public static void getResponseBody(){
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
.body();
}
**Perhatikan bahwa kami menggunakan "badan" alih-alih "semua"; ini membantu kami menjelaskan**trachanya isi dari respons tersebut.
Keluaran:
Mendapatkan kode status respons
Metode selanjutnya yang akan kita buat dalam skrip adalah mendapatkan kode status dan menambahkan pernyataan untuk memvalidasinya.
Langkah 1) Buatlah sebuah metode bernama getResponseStatus().
Langkah 2) Gunakan struktur permintaan yang sama dengan yang digunakan di atas. Salin dan tempel.
Langkah 3) Alih-alih mencatatnya, gunakan 'getStatus'.CodeMetode bawaan Rest Assured untuk mengambil nilai kode status.
Langkah 4) Untuk memastikan bahwa kode status Anda adalah 200, gunakan kata kunci – assertThat().statusCode(mengharapkanCode).
**Catatan - URL adalah variabel yang digunakan untuk menyederhanakan. URL berisi seluruh permintaan API URL.
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
Keluaran:
Kebutuhan Bisnis
Salah satu aturan dasar otomatisasi adalah kita harus memasang pos pemeriksaan sehingga pengujian hanya dapat dilanjutkan jika semua kondisi yang diperlukan terpenuhi. Dalam pengujian API, validasi paling dasar adalah memeriksa apakah kode status permintaan dalam format 2XX.
Kode lengkapnya sejauh ini:
import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
public class myFirstRestAssuredClass {
final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";
public static void main(String args[]) {
getResponseBody();
getResponseStatus();
; }
//This will fetch the response body as is and log it. given and when are optional here
public static void getResponseBody(){
given().when().get(url).then().log()
.all();
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
}
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
}
* Catatan:
- Kode status 200 menandakan keberhasilan dalam skenario ini. Terkadang, Anda mungkin perlu agar permintaan gagal, dalam hal ini Anda dapat menggunakan 4XX atau 5XX. Cobalah mengubah kode status dengan memberikan parameter yang tidak valid dan periksa hasilnya.
- Saat kami menegaskan suatu kondisi, tidak akan ada pencetakan di konsol kecuali ada kesalahan.
Skrip untuk mengambil bagian respons yang berbeda
Selain isi respons dan kode status, REST Assured juga menampilkan header, waktu respons, dan tipe konten melalui ekspresi berantai.tracmetode tor. Kata kunci 'extracIni sangat penting untuk mengambil bagian-bagian spesifik ini.
Header
Yakinlah adalah bahasa yang sangat mudah, dan mengambil header juga sama sederhananya. Nama metodenya adalah header(). Seperti sebelumnya, kami akan membuat metode mandiri untuk melakukan hal yang sama.
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
Harap dicatat bahwa 'given().when()' dilewati di sini, dan baris kode dimulai dari get(). Ini karena tidak ada prasyarat atau verifikasi yang dilakukan sebelum melakukan permintaan dan mendapatkan respons. Dalam kasus seperti ini, penggunaan 'given().when()' bersifat opsional.
Output:
Kebutuhan Bisnis:
Seringkali, Anda perlu menggunakan token otorisasi atau cookie sesi untuk permintaan selanjutnya, dan detail ini sebagian besar dikembalikan sebagai header respons.
Response Time
Untuk mendapatkan waktu yang diperlukan untuk mengambil respons dari backend atau sistem hilir lainnya, Rest Assured menyediakan metode yang disebut 'timeIn' dengan timeUnit yang sesuai untuk mendapatkan waktu yang dibutuhkan untuk mengembalikan respons.
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
Keluaran:
Kebutuhan Bisnis:
Salah satu fitur yang sangat penting dalam pengujian API adalah waktu responsnya, yang mengukur kinerja aplikasi. Waktu yang dibutuhkan untuk panggilan Anda mungkin lebih lama atau lebih singkat tergantung pada kecepatan internet Anda, kinerja API pada saat itu, beban server, dan faktor-faktor lain yang memengaruhi waktu tersebut.
Content-Type
Anda bisa mendapatkan tipe konten dari respons yang dikembalikan menggunakan metode “contentType()”.
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
Keluaran
Kebutuhan Bisnis:
Terkadang, mendapatkan tipe konten sangat penting untuk memastikan tidak ada celah keamanan terhadap ancaman lintas asal dan untuk memastikan bahwa konten yang dikirimkan sesuai dengan standar API.
Ambil Elemen JSON Individual
Berdasarkan respons yang diberikan, Anda diminta untuk menghitung jumlah total. Anda perlu mengambil setiap jumlah dan menjumlahkannya.
Tangga:
Langkah 1) Kolom jumlah berada di dalam sebuah array dengan kunci “statements”, yang selanjutnya berada di dalam daftar dengan kunci “result”.
Langkah 2) Rest Assured menyediakan mekanisme untuk mengakses nilai-nilai dalam API menggunakan "path".
Langkah 3) Jalur untuk mencapai jumlah adalah “result.statements.AMOUNT”. Anggap saja seperti XPath dalam Selenium.
Langkah 4) Ambil semua jumlah dalam sebuah koleksi, lalu lakukan perulangan melalui semua nilai untuk menghitung jumlahnya.
public static void getSpecificPartOfResponseBody(){
ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){
System.out.println("The amount value fetched is "+a);
sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);
}
Catatan: Karena nilai jumlah berupa tipe data string, kami mengonversinya menjadi bilangan bulat untuk penjumlahan.
Keluaran:
Praktik Terbaik untuk Otomatisasi Pengujian REST Assured
Setelah memahami dasar-dasarnya, menerapkan pola yang disiplin akan menjaga keandalan rangkaian pengujian Anda seiring bertambahnya kompleksitas API. Praktik-praktik di bawah ini membantu tim menghindari pengujian yang tidak stabil dan biaya pemeliharaan yang tinggi.
- Sentralisasi Basis URL: Simpan URI dasar dan token otentikasi dalam satu kelas konfigurasi atau file properti. Ini menghindari duplikasi dan menyederhanakan peralihan lingkungan.
- Gunakan Spesifikasi Permintaan dan Respons: Buat objek RequestSpecBuilder dan ResponseSpecBuilder yang dapat digunakan kembali. Objek ini mengurangi kode berulang (boilerplate) ketika banyak pengujian menggunakan header atau pernyataan yang sama.
- Validasi Skema JSON: Gabungkan REST Assured dengan modul json-schema-validator untuk mengkonfirmasi konfigurasi.tracIntegritas skema. Pemeriksaan skema mendeteksi perubahan yang merusak sebelum mencapai konsumen hilir.
- Eksternalisasi Data Uji: Simpan muatan data dalam file JSON atau gunakan penyedia data dari TestNGData yang dikodekan secara permanen (hard-coded) akan cepat menjadi usang.
- Jalankan Tes Independen: Setiap pengujian harus menyiapkan dan menghapus datanya sendiri. Rangkaian pengujian yang bergantung pada urutan akan gagal secara tidak terduga dalam menjalankan CI secara paralel.
- Ambil Log Secara Selektif: Gunakan log().ifError() pada suite stabil dan log().all() selama proses debugging. Log yang terlalu panjang memperlambat pipeline CI dan mengaburkan masalah sebenarnya.
- Terintegrasi dengan CI/CD: Aktifkan rangkaian REST Assured melalui Maven Surefire atau Failsafe di JenkinsGunakan GitHub Actions, atau GitLab. Jalankan smoke check pada setiap commit dan regresi penuh semalaman.
Menerapkan kebiasaan ini sejak dini akan mengubah otomatisasi API menjadi aset jangka panjang, bukan lagi hambatan yang rapuh.





