Pengembangan Berbasis Perilaku (Behavior-Driven Development) telah secara fundamental mengubah cara tim memandang kualitas perangkat lunak dengan membuat pengujian dapat dibaca oleh semua orang! Menggunakan Cucumber untuk pengujian BDD adalah keterampilan yang menjembatani kesenjangan antara persyaratan bisnis dan implementasi teknis, menciptakan dokumentasi langsung yang benar-benar dieksekusi. Jika Anda kesulitan dengan kasus uji yang menjadi usang saat ditulis, panduan ini akan menunjukkan cara yang lebih baik.
Apa itu Cucumber dan BDD?
Cucumber adalah alat sumber terbuka yang menjalankan pengujian otomatis yang ditulis dalam bahasa sederhana. Ini mengimplementasikan Behavior-Driven Development (BDD), sebuah metodologi di mana pengembang, penguji, dan pemangku kepentingan bisnis berkolaborasi untuk mendefinisikan perilaku perangkat lunak menggunakan contoh konkret.
BDD berfokus pada menjawab satu pertanyaan: "Apa yang harus dilakukan sistem?" daripada "Bagaimana kita harus mengujinya?" Hasilnya adalah bahasa bersama yang menghilangkan kesalahpahaman dan menciptakan pengujian yang berfungsi sebagai spesifikasi dan validasi yang dapat dieksekusi.
Cucumber membaca file .feature yang berisi skenario yang ditulis dalam sintaks Gherkin dan mengeksekusinya terhadap definisi langkah—kode yang melakukan otomatisasi yang sebenarnya. Pemisahan ini berarti pemangku kepentingan bisnis dapat meninjau skenario pengujian tanpa membaca kode, sementara pengembang mengimplementasikan detail teknis secara terpisah.

Menginstal Cucumber untuk JavaScript
Menyiapkan Cucumber dalam proyek Node.js hanya membutuhkan beberapa perintah:
Prasyarat:
- Node.js
- NPM
- Proyek API yang memiliki fitur login yang akan kita uji (Tutorial ini hanya akan membahas instalasi cucumber dan pengujian gherkin).

# Buat direktori proyek baru
mkdir cucumber-bdd-demo && cd cucumber-bdd-demo
# Inisialisasi npm
npm init -y
# Instal Cucumber dan dependensi pengujian
npm install --save-dev @cucumber/cucumber chai axios

package.json Anda harus menyertakan skrip pengujian:
{
"scripts": {
"test": "cucumber-js"
}
}
Buat struktur direktori ini:
project/
├── features/
│ └── user-management.feature
├── step-definitions/
│ └── user-steps.js
├── package.json
└── cucumber.json
Panduan Praktis: Menulis Pengujian BDD Pertama Anda
Mari kita buat pengujian untuk API manajemen pengguna untuk mendemonstrasikan Cara Menggunakan Cucumber untuk Pengujian BDD dalam praktik.
Langkah 1: Tulis File Fitur
Buat features/user-management.feature:
Feature: User Management API
As an API client
I want to manage users
So that I can integrate user functionality into my application
Scenario: Create a new user successfully
Given I have a valid user payload
When I send a POST request to "/api/users"
Then the response status should be 201
And the response should contain a user ID
Scenario: Attempt to create user with invalid email
Given I have a user payload with invalid email
When I send a POST request to "/api/users"
Then the response status should be 400
And the response should contain "Invalid email format"
Langkah 2: Implementasi Definisi Langkah
Buat step-definitions/user-steps.js:
const { Given, When, Then } = require('@cucumber/cucumber');
const { expect } = require('chai');
const axios = require('axios');
let requestPayload;
let response;
Given('I have a valid user payload', function() {
requestPayload = {
name: 'Test User',
email: 'test@example.com',
password: 'ValidPass123'
};
});
Given('I have a user payload with invalid email', function() {
requestPayload = {
name: 'Test User',
email: 'invalid-email',
password: 'ValidPass123'
};
});
When('I send a POST request to {string}', async function(endpoint) {
try {
response = await axios.post(`http://localhost:3000${endpoint}`, requestPayload);
} catch (error) {
response = error.response;
}
});
Then('the response status should be {int}', function(statusCode) {
expect(response.status).to.equal(statusCode);
});
Then('the response should contain a user ID', function() {
expect(response.data).to.have.property('userId');
expect(response.data.userId).to.match(/^[0-9a-fA-F]{24}$/);
});
Then('the response should contain {string}', function(message) {
expect(response.data.message).to.include(message);
});
Langkah 3: Edit File Cucumber.json
Buat file "cucumber.json" di direktori root proyek Anda dan tambahkan kode berikut:
{
"default": {
"formatOptions": {
"snippetInterface": "synchronous"
}
}
}Langkah 4: Jalankan Pengujian
Eksekusi pengujian Anda dengan:
npm test
Cucumber akan menampilkan hasil terperinci yang menunjukkan langkah mana yang berhasil, tidak terdefinisi, atau gagal.
Aturan untuk Menulis Skenario BDD yang Baik
Mempelajari Cara Menggunakan Cucumber untuk Pengujian BDD secara efektif memerlukan mengikuti aturan-aturan yang terbukti ini:
1. Struktur Given-When-Then
Setiap skenario harus memiliki tiga bagian ini secara berurutan:
- Given (Diberikan): Menyiapkan prasyarat
- When (Ketika): Menjelaskan tindakan
- Then (Maka): Memvalidasi hasil
2. Tulis secara Deklaratif, Bukan Imperatif
Buruk:
Given I open the browser
And I navigate to "/login"
And I type "test@example.com" in the email field
And I type "password" in the password field
And I click the login button
Baik:
Given I am on the login page
When I log in with valid credentials
Then I should see the dashboard
Fokus pada apa yang Anda uji, bukan bagaimana Anda melakukannya.
3. Satu Skenario, Satu Tujuan
Setiap skenario harus menguji satu perilaku tunggal. Skenario gabungan menyembunyikan kegagalan dan mempersulit debugging.
4. Gunakan Bahasa Bisnis
Tulis skenario yang dapat dipahami oleh pemangku kepentingan bisnis. Hindari jargon teknis dan detail implementasi.
5. Buat Skenario Independen
Skenario tidak boleh bergantung satu sama lain. Masing-masing harus menyiapkan datanya sendiri dan membersihkannya setelahnya.
Fitur Lanjut Cucumber: Tabel Data dan Garis Besar Skenario
Tabel Data untuk Input Kompleks
Ketika Anda perlu menguji dengan beberapa titik data, gunakan tabel:
Scenario: Create users with different roles
Given I have the following user data:
| name | email | role |
| Alice | alice@example.com | admin |
| Bob | bob@example.com | user |
When I send a POST request to "/api/users"
Then all users should be created successfully
Definisi langkah:
Given('I have the following user data:', function(dataTable) {
requestPayload = dataTable.hashes();
});
Garis Besar Skenario untuk Pengujian Berbasis Data
Ketika Anda ingin menjalankan skenario yang sama dengan data yang berbeda, gunakan garis besar:
Scenario Outline: Login with various credentials
Given I am on the login page
When I enter "<email>" and "<password>"
Then I should see "<result>"
Examples:
| email | password | result |
| test@example.com | validPass | Dashboard |
| test@example.com | wrongPass | Invalid password|
| invalid@email.com | validPass | Invalid email |
Ini secara otomatis membuat tiga skenario pengujian terpisah.
Mengatur Pengujian dengan Tag
Tag membantu Anda mengategorikan dan memfilter skenario:
@smoke @regression
Scenario: User login
Given I am on the login page
When I log in with valid credentials
Then I should see the dashboard
@api @critical
Scenario: API health check
Given the API is running
When I request "/health"
Then the response status should be 200
Jalankan hanya tag tertentu:
npm test -- --tags "@smoke"
Bagaimana Apidog Membantu Pengujian API dalam Alur Kerja BDD
Meskipun Cucumber unggul dalam mendefinisikan perilaku, Apidog mengotomatiskan pekerjaan berat dalam pembuatan dan eksekusi pengujian API, menjadikan Cucumber untuk pengujian BDD jauh lebih efisien.
Pembuatan Kasus Uji API Bertenaga AI
Daripada menulis definisi langkah secara manual untuk panggilan API, Apidog menghasilkannya dari spesifikasi OpenAPI Anda menggunakan AI:
# Your API spec
paths:
/api/users:
post:
requestBody:
content:
application/json:
schema:
type: object
properties:
name: string
email: string
responses:
'201':
description: User created
Apidog secara otomatis membuat skenario siap uji:
- Pengujian Positif: Payload valid → status 201
- Pengujian Negatif: Email tidak valid → status 400
- Pengujian Batasan: Bidang wajib tidak ada → status 400

Pertanyaan yang Sering Diajukan
P1: Apakah saya perlu tahu pemrograman untuk menulis pengujian Cucumber?
Jwb: Menulis skenario Gherkin tidak memerlukan pengkodean—hanya pemikiran yang jelas tentang perilaku. Namun, mengimplementasikan definisi langkah memerlukan pengetahuan JavaScript (atau bahasa lain). Alat seperti Apidog mengurangi beban ini dengan menghasilkan kode definisi langkah secara otomatis.
P2: Apa perbedaan Cucumber dengan kerangka kerja pengujian tradisional?
Jwb: Kerangka kerja tradisional (Jest, Mocha) berfokus pada implementasi teknis. Cucumber berfokus pada perilaku bisnis. Skenario Cucumber yang sama dapat menggerakkan pengujian UI web (Selenium), pengujian API (Axios), atau pengujian seluler (Appium) tanpa mengubah teks Gherkin.
P3: Bisakah Cucumber menggantikan alat pengujian API?
Jwb: Cucumber menyediakan struktur pengujian, tetapi Anda masih membutuhkan alat untuk mengeksekusi panggilan API (Axios, Supertest) dan memvalidasi respons. Apidog melengkapi Cucumber dengan menangani lapisan eksekusi API sementara Cucumber mengelola alur kerja BDD.
P4: Apa yang membuat skenario Cucumber yang baik?
Jwb: Skenario yang baik bersifat independen, menggunakan bahasa bisnis, mengikuti struktur Given-When-Then, dan menguji satu perilaku masing-masing. Skenario tersebut harus dapat dibaca oleh pemangku kepentingan non-teknis dan berfokus pada apa yang dilakukan sistem, bukan bagaimana ia melakukannya.
P5: Bagaimana Apidog menangani autentikasi dalam pengujian BDD?
Jwb: Apidog mengelola token autentikasi secara otomatis. Anda dapat mendefinisikan langkah "Given I am authenticated" yang menggunakan manajemen kredensial Apidog untuk mengambil token yang valid, menghilangkan penanganan token manual dalam definisi langkah Anda.
Kesimpulan
Menggunakan Cucumber untuk pengujian BDD secara efektif mengubah proses pengembangan Anda dengan menciptakan pemahaman bersama di seluruh tim teknis dan bisnis. Sintaks Gherkin memaksakan kejelasan, sementara pemisahan skenario dan definisi langkah menjaga pengujian tetap dapat dipelihara seiring berkembangnya aplikasi Anda.
Kekuatan sebenarnya datang dari integrasi Cucumber dengan alat otomatisasi modern. Apidog menghilangkan pekerjaan manual yang membosankan dalam menulis kode pengujian API, memungkinkan Anda untuk fokus mendefinisikan perilaku yang berarti sementara ia menangani eksekusi. Kombinasi ini memberikan yang terbaik dari kedua dunia: spesifikasi yang dapat dibaca manusia yang berfungsi sebagai dokumentasi hidup, dan pengujian otomatis yang kuat yang berjalan secara berkelanjutan.
Mulai dari yang kecil. Pilih satu endpoint API. Tulis tiga skenario: sukses, gagal, dan kasus batas. Implementasikan definisi langkah. Jalankan. Tunjukkan hasilnya kepada pemilik produk Anda. Setelah mereka melihat persyaratan bisnis dieksekusi sebagai pengujian, Anda akan mendapatkan dukungan untuk memperluas BDD di seluruh proyek Anda. Saat itulah penggunaan Cucumber untuk pengujian BDD berhenti menjadi praktik teknis dan menjadi gerakan kualitas di seluruh tim.
