Tutorial REST Assured untuk Pengujian Otomatisasi API (Contoh)
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 tampilan peta Google dan mencari tempat yang ingin Anda tuju, Anda langsung melihat restoran terdekat, Anda melihat opsi untuk perjalanan; dari beberapa penyedia perjalanan terkemuka, dan lihat begitu banyak pilihan di ujung jari Anda. Kita semua tahu itu bukan produk Google, lalu bagaimana Google bisa menampilkannya. Mereka menggunakan API terbuka dari penyedia ini. Sekarang, jika Anda diminta untuk menguji pengaturan semacam ini, bahkan sebelum UI dibuat atau sedang dikembangkan, pengujian API menjadi sangat penting dan pengujiannya berulang kali, dengan kombinasi data yang berbeda menjadikannya kasus yang sangat cocok untuk otomatisasi.
Sebelumnya, kami menggunakan bahasa dinamis seperti groovy, ruby untuk mencapai hal ini, dan ini merupakan tantangan. Oleh karena itu pengujian API tidak dieksplorasi dengan pengujian fungsional.
Namun menggunakan Yakinlah, pengujian otomatisasi API, mengirimkan permintaan https sederhana dengan penyesuaian yang mudah digunakan adalah hal yang mudah jika seseorang memiliki latar belakang dasar Java. Hal ini diperlukan untuk memahami pengujian API, dan pengujian integrasi, tetapi setelah otomatisasi Yakinlah memberikan kepercayaan yang sangat baik pada backend sementara pengujian front-end hanya dapat fokus pada UI dan operasi sisi klien. Yakinlah adalah sumber terbuka dengan banyak metode tambahan dan pustaka yang ditambahkan menjadikannya pilihan tepat untuk otomatisasi API.
Cara Mengatur Rest Assured.io dengan Eclipse
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 serupa di IDE mana pun yang mungkin Anda gunakan.
- Buka POM.xml Anda
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 baik,
- Lakukan pembangunan maven untuk mengimpor semua dependensi, sekali lagi Anda akan menemukan bantuan tentang pengaturan Maven di guru99.
- Namun, Anda tetap melihat kesalahan, lalu lakukan pembersihan maven diikuti dengan instalasi maven, dan itu akan dibangun tanpa kesalahan apa pun.
- Anda dapat menambahkan baris di bawah ini di kelas Java Anda dan tidak melihat ada kesalahan kompilasi.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Skrip Yakinlah sederhana pertama
sintaks:
Sintaks Rest Assured.io adalah bagian yang paling indah, karena sangat mirip dan dapat dimengerti oleh BDD.
Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z"));
Penjelasan:
Kode | Penjelasan |
---|---|
Diberikan() | Kata kunci 'Diberikan', memungkinkan Anda mengatur latar belakang, di sini, Anda meneruskan header permintaan, parameter kueri dan jalur, isi, cookie. Ini opsional jika item ini tidak diperlukan dalam permintaan |
Kapan() | Kata kunci 'kapan' menandai premis skenario Anda. Misalnya, 'ketika' Anda mendapatkan/memposting/meletakkan sesuatu, lakukan hal lain. |
Metode() | Gantikan ini dengan salah satu operasi CRUD (get/post/put/delete) |
Kemudian() | Kondisi penegasan dan pencocokan Anda ada di sini |
Sekarang setelah Anda memiliki pengaturan dan latar belakang sintaksisnya, mari buat pengujian sederhana pertama kita. Tidak apa-apa jika sejauh ini strukturnya tampak baru bagi Anda, saat Anda mengkodekan lebih lanjut 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.
Jika Anda mendapatkan kesalahan pada browser saat mencoba mendapatkan respons atas permintaan tersebut,
- Lihat apakah Anda telah menggunakan Https atau Http. Browser Anda mungkin memiliki pengaturan untuk tidak membuka situs web yang tidak aman.
- Lihat apakah Anda memiliki proxy atau firewall yang memblokir browser Anda agar tidak membuka situs web.
*Note – Anda tidak menggunakan header apa pun di sini, tidak ada isi, dan tidak ada cookie. Itu adalah URL dan Anda juga mendapatkan konten dari API dan tidak memposting atau memperbarui konten apa pun yang ada, sehingga menjadikannya panggilan GET. Ingatlah ini untuk memahami pengujian 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 metode yang disebut “getResponseBody”
Langkah 3) Mirip dengan struktur yang dipelajari sebelumnya, kapan dan kemudian, ketikkan kode di bawah ini
diberikan(). -> Tidak diperlukan header, tidak diperlukan parameter kueri atau jalur.
Kapan(). -> Tidak ada pengaturan kondisi khusus
mendapatkan('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->hanya url yang perlu diberikan
Kemudian(). -> Tidak diperlukan pernyataan khusus
catatan(). all() -> Setelah semua respons diambil, catat respons, header, pada dasarnya semua yang diminta dikembalikan kepada Anda.
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 yang digunakan panjang dan kurang mudah dibaca, jika Anda perhatikan lebih dekat, Anda akan melihat bahwa 3 parameter kueri sedang digunakan yaitu
- ID Pelanggan
- Kata Sandi
- No rekening
Yakinlah, membantu kami meneruskan setiap bagian (kueri, jalur, parameter header) secara terpisah, membuat kode lebih mudah dibaca dan dipelihara. Selain itu, kita dapat membuat parameter 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 “body” dan bukan “all”; ini membantu kita mengekstrak hanya isi responsnya.
Keluaran:
Mendapatkan kode status respons
Metode selanjutnya yang kita skrip adalah mendapatkan kode status dan juga memberikan pernyataan untuk memvalidasinya.
Langkah 1) Buat metode yang disebut getResponseStatus()
Langkah 2) Gunakan struktur permintaan yang sama dengan yang digunakan di atas. Salin dan tempel.
Langkah 3) Daripada mencatatnya, kami menggunakan metode bawaan 'getStatusCode' dari Rest Assured untuk mengambil nilai kode status
Langkah 4) Untuk menegaskan bahwa kode status Anda adalah 200, kami menggunakan kata kunci – menegaskanItu().statusCode(expectedCode)
**Catatan – URL adalah variabel yang digunakan untuk kesederhanaan. URL menampung seluruh URL permintaan API
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:
- 200 adalah respons yang berhasil untuk skenario ini. Terkadang, permintaan Anda juga harus gagal, lalu Anda mungkin menggunakan 4XX atau 5XX. Cobalah mengubah kode status dengan memberikan parameter yang tidak valid dan periksa.
- Saat kami menegaskan suatu kondisi, tidak akan ada pencetakan di konsol kecuali ada kesalahan.
Skrip untuk mengambil bagian respons yang berbeda
Pengambilan isi respons dan kode status respons sudah tercakup dalam segmen di atas. Perlu dicatat bahwa untuk mengambil bagian respons yang berbeda, kata kunci 'ekstrak' sangatlah penting.
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 perhatikan bahwa 'given().when()' dilewati di sini, dan baris kode dimulai dari get(), ini karena tidak ada prasyarat atau verifikasi yang dilakukan di sini untuk memenuhi permintaan dan mendapatkan respons. Dalam kasus seperti itu, menggunakan hal yang sama adalah opsional.
Output:
Kebutuhan Bisnis:
Seringkali, Anda perlu menggunakan token otorisasi, atau cookie sesi untuk permintaan berikutnya, dan sebagian besar, detail ini dikembalikan sebagai tajuk 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:
Fitur yang sangat penting dalam pengujian API adalah waktu responsnya, untuk mengukur kinerja aplikasi. Perhatikan bahwa waktu yang dibutuhkan untuk panggilan Anda mungkin memerlukan waktu lebih lama atau lebih sedikit tergantung pada kecepatan internet Anda, kinerja API pada saat itu, beban server, dan 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 untuk ancaman lintas asal atau hanya untuk memastikan konten yang diteruskan sesuai dengan standar API.
Ambil Elemen JSON Individual
Dari respon yang diberikan, Anda diminta menghitung jumlah totalnya, Anda perlu mengambil setiap jumlah dan menjumlahkannya.
Tangga:
Langkah 1) Bidang jumlah berada dalam array dengan Kunci "pernyataan" yang pada gilirannya ada dalam daftar dengan kunci "hasil"
Langkah 2) Yakinlah, menyediakan mekanisme untuk mencapai nilai di API menggunakan “jalur”
Langkah 3) Jalur untuk mencapai jumlah adalah “hasil.pernyataan.AMOUNT”. Anggap saja seperti Xpath di Selenium.
Langkah 4) Ambil semua jumlah dalam koleksi, lalu ulangi 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 dalam tipe data string, kami mengonversinya menjadi bilangan bulat dan menggunakannya untuk penjumlahan.
Keluaran:
Ringkasan
- Yakinlah adalah sekelompok perpustakaan java yang memungkinkan kita untuk mengotomatisasi Istirahat pengujian API
- Yakinlah adalah Javaberbasis, dan pengetahuan inti Java cukup untuk mempelajarinya
- Ini membantu mengambil nilai permintaan dan respons dari struktur JSON yang rumit
- The API permintaan dapat dikustomisasi dengan berbagai header, kueri, parameter jalur, dan sesi atau cookie apa pun yang akan disetel.
- Ini membantu menetapkan pernyataan dan kondisi yang tegas.
- Meskipun Yakinlah sangat membantu ketika responsnya bertipe JSON, metodenya mungkin tidak berfungsi dengan lancar jika tipe kontennya adalah HTML atau teks biasa.