Fitur Mentimun: ikhtisar
Diterbitkan: 2022-04-20Pendahuluan
Gherkin adalah bahasa yang masih digunakan di banyak kerangka kerja otomatisasi pengujian. Terkadang karena klien mengharuskan kita untuk menggunakannya, terkadang karena tim memutuskan untuk melakukannya.
Sejujurnya, itu bukan cinta pada pandangan pertama bagiku. Saya pribadi memiliki perjalanan yang cukup panjang dengan Gherkin– dari menyukainya pada awalnya, dengan membenci bahasa untuk sementara waktu, dan akhirnya menyukainya lagi. Pada artikel ini saya akan menyajikan fitur Mentimun yang paling penting bersama dengan implementasi Java.
Berikut adalah semua fitur Mentimun yang dibahas dalam artikel ini:
Fitur | Keterangan |
---|---|
Skenario | Skenario sederhana |
Garis Besar Skenario | Mengharuskan pengguna untuk memberikan data pengujian di bagian "Contoh" |
Tabel Data | Mengharuskan pengguna untuk memberikan data pengujian untuk langkah pengujian |
Konteks Skenario | Berbagi nilai di antara langkah-langkah pengujian |
Tipe Data Mentimun | Tipe data ditangani oleh mentimun |
Ekspresi Reguler Mentimun | Penggunaan ekspresi reguler dalam skenario mentimun |
Kait mentimun | Menjalankan kode tambahan dalam skenario pengujian |
File fitur
Pertama-tama, apa itu file fitur? Di dunia teknis, pendekatan non-teknis dibuat untuk memungkinkan orang non-teknis bekerja sama dengan tim selama pengembangan aplikasi. Bahasa Gherkin dibuat sebagai lapisan tambahan dalam pendekatan BDD. Tes Gherkin terletak di apa yang disebut file fitur yang direkatkan dengan kode (Java, Kotlin, C# dll.). Biasanya Gherkin sangat mudah digunakan, dan membutuhkan pengetahuan pemrograman minimum, tetapi ada fitur yang memerlukan beberapa pengkodean.
Mari kita mulai dengan sesuatu yang mudah.
Skenario
Berikut adalah contoh tes Mentimun yang paling dasar dan paling mudah digunakan:
Fitur: Skenario Latar Belakang: Sebelum Skenario Tes Mengingat saya mengeksekusi sebelum langkah @Uji Skenario: Skenario Mengingat saya menggunakan langkah parameter "Skenario 1"
Blok Kode 1. Skenario
Blok Kode 1. berisi beberapa hal yang akan dijelaskan:
- Fitur : judul file fitur
- Latar Belakang : kata kunci yang memungkinkan pengguna untuk menjalankan langkah-langkah pengujian sebelum setiap skenario pengujian yang ditentukan dalam file fitur
- @Test : Tag yang memberi tahu kerangka pengujian skenario pengujian apa yang harus dijalankan. "Tes" didefinisikan oleh pengguna. Kita dapat menggunakan misalnya "@SmokeTest"
- Skenario : Nama skenario pengujian
Tes Gherkin menggunakan kata kunci [Given, When, Then, But] sebelum setiap langkah pengujian. Dalam satu-satunya langkah pengujian kami, kecuali langkah Latar Belakang, kami menggunakan parameter di mana kami melewati nilai "Skenario 1".
Sekarang, mari kita lihat seperti apa kode Java yang direkatkan:
@Given("Saya mengeksekusi sebelum langkah") public void iExecuteBeforeStep() { //beberapa implementasi } @Given("Saya menggunakan langkah parameter {string}") public void iUseParametrizedStepOf(String p) { //beberapa implementasi }
Blok Kode 2. Implementasi kode Java dari Skenario
Garis Besar Skenario
Mari kita lakukan sesuatu yang lebih kompleks:
Fitur: Garis Besar Skenario @Uji Garis Besar Skenario: Garis Besar Skenario Mengingat saya menjalankan langkah dengan "<parameter1>" dan "<parameter2>" Contoh: | parameter1 | parameter2 | | parameter1a | parameter2a | | parameter1b | parameter2b |
Blok Kode 3. Garis Besar Skenario
Kali ini kita akan menggunakan Skenario Outline yang memungkinkan kita untuk mengulang skenario pengujian dengan konfigurasi data pengujian yang berbeda. Blok Kode 3. berisi beberapa hal yang harus dijelaskan:
- Contoh : matriks data uji yang akan digunakan oleh skenario uji. Baris pertama adalah header dengan nama parameter.
Dan implementasi Java:
@Given("Saya menjalankan langkah dengan {string} dan {string}") public void iRunStepWithAnd(String p1, String p2) { //beberapa implementasi }
Blok Kode 4. Implementasi Java dari Skenario Outline
Tabel data
Garis Besar Skenario sangat berguna, tetapi bagaimana jika kita tidak ingin mengulang seluruh skenario pengujian tetapi hanya satu langkah pengujian? Gherkin memiliki cara untuk melakukan itu dan itu disebut "Tabel Data".
Fitur: Tabel Data @Uji Skenario: Skenario Tabel Data Mengingat saya memverifikasi kolom berisi nilai yang diharapkan | kolomNama | nilai yang diharapkan | | someColumnName | someExpectedValue |
Blok Kode 5. Tabel Data
Skenario dengan Tabel Data tidak berbeda jauh dengan Skenario Garis Besar. Satu-satunya hal adalah kami tidak meletakkan kata kunci "Contoh" sebelum tabel.
Implementasi Java terlihat sedikit lebih kompleks daripada kasus sebelumnya:
@Given("Saya memverifikasi kolom berisi nilai yang diharapkan") public void iVerifyColumnValuesInTableUsingQueryFromFileOnSchema(DataTable dataTable) { Daftar<Peta<String, String>> data = dataTable.asMaps(); for (Peta<String, String> form : data) { String nama kolom = form.get("nama kolom"); String ekspektasiResult = form.get("expectedValue"); //beberapa implementasi } } }
Blok Kode 6. Implementasi Java dari Tabel Data

Untuk mengakses data dari tabel data, kami membuat dataTable variabel khusus dengan tipe "DataTable". Semua data akan disimpan dalam variabel Daftar.
Konteks Skenario
Menggunakan Konteks Skenario kita dapat berbagi data antar langkah. Mari kita asumsikan kita memiliki skenario dua langkah di mana kita ingin melewatkan nilai “data” dari langkah 1 ke langkah 2 (Blok Kode 7).
@Uji Skenario: Konteks Skenario Mengingat saya menetapkan nilai konteks skenario "data" Mengingat saya menggunakan nilai konteks skenario
Blok Kode 7. Konteks Skenario
Pertama kita perlu membangun kelas khusus yang disebut ScenarioContext dengan fitur konteks skenario pengaturan dan pengambilan data (Blok Kode 8). Konteks skenario kami adalah HashMap dengan pasangan nilai kunci. Kami akan mengidentifikasi nilai berdasarkan kuncinya.
- scenarioContext() : HashMap dari pasangan nilai kunci
- setContext() : metode nilai kunci untuk menyimpan data konteks skenario
- getContext() : metode untuk mendapatkan data yang menyediakan kunci
SkenarioKonteks kelas publik { peta pribadi<String, Object> scenarioContext; skenario publikContext(){ scenarioContext = HashMap baru<>(); } public void setContext(Kunci konteks, Nilai objek) { scenarioContext.put(key.toString(), nilai); } Obyek publik getContext(Kunci konteks){ kembali scenarioContext.get(key.toString()); } } konteks enum publik { PENGENAL; }
Blok Kode 8. Implementasi Java dari kelas Konteks Skenario
Setelah ini kita dapat menggunakan metode yang diimplementasikan. Pada langkah 1 kami kemudian menetapkan nilai dalam konteks skenario dan pada langkah 2 kami mendapatkan nilai (Blok Kode 9).
ScenarioContext scenarioContext = new ScenarioContext(); @Given("Saya menetapkan nilai konteks skenario {string}") public void iSetScenarioContextValue(Nilai string) { scenarioContext.setContext(Context.ID, nilai); } @Given("Saya menggunakan nilai konteks skenario") public void iUseScenarioContextValue() { String sharedValue = scenarioContext.getContext(Context.ID).toString(); }
Blok Kode 9. Langkah-langkah Konteks Skenario
Tipe Data Mentimun
Mentimun menangani sejumlah tipe data yang terbatas. Kita dapat mendefinisikan string, integer, dan nilai float, tetapi dalam kasus nilai boolean, kita perlu mengkodekan beberapa solusi.
@Uji Skenario: Skenario dengan variabel Mengingat saya menggunakan string "string", int 1, float 1.1 dan boolean "false"
Blok Kode 10. Tipe Data Mentimun
Kode Java akan terlihat seperti ini:
@Given("Saya menggunakan string {string}, int {int}, float {float} dan boolean {string}") public void iUseStringIntFloatAndBoolean(String var1, int var2, double var3, String var4) { boolean f = Boolean.valueOf(var4); //beberapa kode }
Blok Kode 11. Implementasi Java dari Tipe Data Mentimun
Ekspresi Reguler Mentimun
Ini adalah fitur lain yang sering digunakan. Blok Kode 12 menunjukkan skenario dua langkah yang berbeda hanya dengan menggunakan nilai variabel yang berbeda (var1 dan var2). Ini sebenarnya hanya satu langkah, dan dalam kode Java (Blok Kode 13) kami mendefinisikan hanya satu metode tetapi dengan regex dan satu parameter var.
@Uji Skenario: Skenario Ekspresi Reguler Mengingat saya menggunakan variabel var1 Mengingat saya menggunakan variabel var2
Blok Kode 12. Ekspresi Reguler dalam Mentimun
@Given("^Saya menggunakan variabel (.*)") public void examTimeTableInSummerSeason(String var) { if (var.equals("var1")){ //beberapa kode } else if(var.equals("var2")){ //beberapa kode } }
Blok Kode 13. Implementasi Java dari ekspresi reguler Mentimun
Kait Mentimun
Last but not least: Ketimun kait.
Blok kode 14 menyajikan 4 kait paling penting:
- @Sebelum : Menjalankan kode sebelum setiap skenario pengujian
- @After : Menjalankan kode setelah setiap skenario pengujian
- @BeforeStep : Mengeksekusi kode sebelum setiap langkah pengujian
- @AfterStep : Mengeksekusi kode setelah setiap langkah pengujian
@Sebelum kekosongan publik sebelum Skenario() { //beberapa kode } @Setelah public void afterScenario() { //beberapa kode } @SebelumLangkah kekosongan publik sebelumLangkah() { //beberapa kode } @AfterStep public void afterStep() { //beberapa kode }
Blok Kode 14. Kait Mentimun
Ringkasan
Saya harap saya meyakinkan Anda untuk menggunakan Gherkin dalam pengujian Anda. Beberapa fitur ini akan membuat tes Anda lebih mudah dibaca dan dipahami oleh orang non-teknis. Juga untuk anggota baru akan lebih mudah untuk memahami logika bisnis dan mengurangi waktu mereka untuk bergabung.