DEV Community

Cover image for Cara Menambahkan Percabangan If/Else dan Kontrol Aliran ke Skenario Tes API di Apidog
Walse
Walse

Posted on • Originally published at apidog.com

Cara Menambahkan Percabangan If/Else dan Kontrol Aliran ke Skenario Tes API di Apidog

Sebagian besar tes API berjalan lurus: panggil login, panggil checkout, panggil endpoint tanda terima, lalu verifikasi hasilnya. Pola ini gagal ketika langkah awal menentukan apakah langkah berikutnya masih relevan. Jika login mengembalikan 401, menjalankan checkout hanya menghasilkan kegagalan lanjutan yang menutupi penyebab utama. Solusinya adalah membuat skenario yang membaca respons login, memutuskan apakah eksekusi dilanjutkan, lalu melaporkan titik kegagalan yang sebenarnya.

Coba Apidog hari ini

Keputusan seperti ini membutuhkan logika kondisional melalui kontrol alur. Dalam panduan ini, Anda akan membuat percabangan if/else di Apidog: jalankan login, periksa kode statusnya, dan panggil checkout hanya jika login berhasil. Jika Anda belum pernah membuat skenario di Apidog, mulai dari panduan cara menulis skenario tes dengan Apidog. Untuk konsep dasar if/else, lihat panduan MDN tentang pernyataan kondisional.

Apa itu kontrol alur?

Di Apidog, tes otomatis berada di modul Test. Unit kerjanya adalah Test Scenario, yang serupa dengan Collection di Postman. Sebuah skenario berisi beberapa Test Step. Setiap langkah dapat berupa request HTTP atau elemen kontrol alur, seperti:

  • Percabangan kondisional
  • Loop
  • Penundaan (Wait)
  • Penanganan error

Kontrol alur di Apidog. Sebuah skenario tes menunjukkan langkah-langkkah berurutan, dengan satu langkah yang diperbesar menunjukkan pengaturan request, post-processor, dan pre-processor.

Kontrol alur membuat skenario tidak sekadar menjalankan request secara berurutan. Untuk referensi setiap opsi, lihat dokumentasi Apidog tentang kontrol alur dan percabangan kondisional.

Fokus artikel ini adalah Conditional Branching, yaitu implementasi if/else di Apidog:

if kondisi terpenuhi:
  jalankan langkah pada blok If
else:
  jalankan langkah pada blok Else
Enter fullscreen mode Exit fullscreen mode

Percabangan bukan loop. Percabangan membuat satu keputusan, sedangkan loop menjalankan blok langkah berkali-kali. Jika Anda perlu memproses array ID pesanan, gunakan ForEach Loop, bukan Conditional Branching. Lihat tutorial loop ForEach.

Dokumentasi Apidog tidak mencantumkan pembatasan gratis-versus-berbayar atau cloud-versus-self-hosted untuk kontrol alur, percabangan, loop, maupun penerusan data antar langkah.

Bangun skenario: login lalu checkout hanya jika berhasil

Target alurnya:

POST /login
  └── jika status = 200
        └── POST /checkout
  └── jika status ≠ 200
        └── tandai kegagalan / kirim notifikasi
Enter fullscreen mode Exit fullscreen mode

Langkah 1: buat Test Scenario

  1. Buka Apidog dan masuk ke modul Test.
  2. Klik ikon + di samping kolom pencarian.
  3. Pilih direktori untuk skenario.
  4. Tentukan prioritas, lalu selesaikan pembuatan.

Anda sekarang memiliki skenario kosong untuk menambahkan langkah tes.

Langkah 2: tambahkan request login

Tambahkan Test Step pertama sebagai request POST ke endpoint autentikasi:

POST https://api.your-store.com/v1/login
Content-Type: application/json

{
  "email": "dana@example.com",
  "password": "correct-horse-battery-staple"
}
Enter fullscreen mode Exit fullscreen mode

Jalankan request ini terlebih dahulu untuk memastikan responsnya sesuai ekspektasi. Login berhasil umumnya mengembalikan status 200 dan token:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "userId": "usr_10482"
}
Enter fullscreen mode Exit fullscreen mode

Langkah 3: masuk ke mode orkestrasi

Klik salah satu langkah untuk masuk ke mode orkestrasi.

  • Panel kiri menampilkan alur seluruh skenario.
  • Panel kanan menampilkan konfigurasi langkah yang dipilih.
  • Seret ikon untuk mengubah urutan langkah.

Di tampilan ini Anda akan menambahkan blok if/else.

Langkah 4: tambahkan Conditional Branching

  1. Klik Add Step.
  2. Pilih Conditional Branching.
  3. Konfigurasikan kondisi untuk memeriksa status respons login.

Untuk kasus ini, kondisinya adalah:

status respons login Equals 200
Enter fullscreen mode Exit fullscreen mode

Apidog menyediakan operator berikut untuk membangun kondisi:

  • Equals
  • Does not equal
  • Exists
  • Does not exist
  • Less than
  • Less than or equal
  • Greater than
  • Greater than or equal
  • Matches with Regex
  • Contains
  • Does not contain
  • Is empty
  • Is not Empty
  • In List
  • Not in List

Langkah 5: gunakan data dari respons login

Ada dua cara untuk mengambil nilai dari langkah sebelumnya.

Opsi 1: Retrieve pre-step data

Klik field nilai kondisi, lalu klik ikon tongkat sihir dan pilih Retrieve pre-step data.

Apidog dapat mengambil data langsung dari respons request sebelumnya. Sintaks referensinya:

{{$.<step id>.response.body.<field path>}}
Enter fullscreen mode Exit fullscreen mode

Misalnya, untuk mengambil token dari body respons langkah login dengan ID 1:

{{$.1.response.body.token}}
Enter fullscreen mode Exit fullscreen mode

Referensi data pra-langkah di Apidog. Dialog untuk mengambil data dari langkah sebelumnya.

Perhatikan dua hal berikut:

  1. Retrieve pre-step data hanya tersedia di modul Test, bukan modul API.
  2. Nilai referensi hanya terisi saat Anda menjalankan seluruh skenario. Jika menjalankan satu langkah saja, nilai dari langkah sebelumnya belum tersedia.

Untuk pengecekan kode status, gunakan data status dari langkah login sebagai nilai di sisi kiri kondisi, lalu set operator ke Equals dan nilai pembanding ke 200.

Opsi 2: ekstrak ke variabel bernama

Gunakan pendekatan ini jika token atau nilai respons perlu dipakai di beberapa request atau modul.

  1. Buka konfigurasi login.
  2. Tambahkan aksi Extract Variable pada pre-processor atau konfigurasi ekstraksi yang sesuai.
  3. Ekstrak nilai dengan JSONPath, misalnya:
$.token
Enter fullscreen mode Exit fullscreen mode
  1. Simpan sebagai variabel, misalnya token.
  2. Gunakan di langkah berikutnya:
{{token}}
Enter fullscreen mode Exit fullscreen mode

Pendekatan ini berguna untuk request checkout yang membutuhkan header otorisasi. Pelajari pola ini lebih lanjut di panduan cara meneruskan data antar langkah tes.

Langkah 6: tambahkan blok Else

Arahkan kursor ke blok If, lalu klik + Else.

Sekarang isi kedua jalur eksekusi:

Blok If: jalankan checkout

Tambahkan request checkout di dalam blok If. Request ini hanya akan berjalan saat login mengembalikan 200.

Jika checkout membutuhkan token, gunakan variabel yang diekstrak:

POST https://api.your-store.com/v1/checkout
Authorization: Bearer {{token}}
Content-Type: application/json

{
  "cartId": "cart_123"
}
Enter fullscreen mode Exit fullscreen mode

Atau gunakan referensi pre-step langsung jika token belum diekstrak sebagai variabel.

Pola header Authorization: Bearer ... juga umum digunakan pada request terautentikasi, seperti yang dijelaskan dalam dokumentasi API Stripe.

Blok Else: buat kegagalan terlihat jelas

Di dalam blok Else, tambahkan langkah yang menandai kegagalan login secara eksplisit. Contoh tindakan yang dapat digunakan:

  • Kirim request ke endpoint logging.
  • Kirim notifikasi ke sistem internal.
  • Tambahkan request kustom dengan assertion yang selalu gagal.

Tujuannya adalah memastikan laporan skenario menunjukkan bahwa penyebab kegagalan ada pada login, bukan pada checkout.

Hasil akhirnya:

if login.status === 200:
  jalankan checkout
else:
  catat kegagalan login
Enter fullscreen mode Exit fullscreen mode

Langkah 7: simpan dan jalankan skenario

Klik Save All untuk menyimpan perubahan. Jika masih ada indikator titik, berarti ada perubahan yang belum tersimpan.

Uji kedua jalur:

  • Gunakan kredensial valid untuk memastikan blok If aktif.
  • Gunakan kredensial salah untuk memastikan blok Else aktif.

Variasi percabangan yang berguna

Bercabang berdasarkan field response body

Status HTTP bukan satu-satunya nilai yang bisa diuji. Misalnya, API login dapat mengembalikan 200 untuk akun terkunci, tetapi mengirim status aktual di body:

{
  "status": "locked",
  "message": "Account is temporarily locked"
}
Enter fullscreen mode Exit fullscreen mode

Gunakan referensi berikut:

{{$.1.response.body.status}}
Enter fullscreen mode Exit fullscreen mode

Lalu buat kondisi:

{{$.1.response.body.status}} Equals "active"
Enter fullscreen mode Exit fullscreen mode

Anda juga dapat memakai:

  • Contains untuk memeriksa teks pesan.
  • Greater than untuk nilai numerik seperti saldo.
  • In List untuk memvalidasi role pengguna terhadap daftar role yang diizinkan.

Gabungkan percabangan dan loop

Conditional Branching dapat ditempatkan di dalam ForEach Loop.

Contohnya, jika Anda memproses array produk, gunakan percabangan untuk melewati produk yang stoknya tidak tersedia:

ForEach product:
  if product.available == true:
    proses produk
  else:
    lewati produk
Enter fullscreen mode Exit fullscreen mode

Referensi loop yang tersedia:

{{$.<loop step id>.index}}
{{$.<loop step id>.element.<field path>}}
Enter fullscreen mode Exit fullscreen mode

Index loop dimulai dari 0. Untuk implementasi lengkap, lihat tutorial loop ForEach.

Screenshot pengaturan loop ForEach di Apidog, menunjukkan blok loop dan konfigurasi langkah.

Hentikan loop dengan Break If

Gunakan Break If condition untuk menghentikan loop segera saat suatu kondisi terpenuhi.

Contoh:

Jika respons mengembalikan status "completed":
  hentikan loop
Enter fullscreen mode Exit fullscreen mode

Anda dapat menambahkan lebih dari satu Break If condition dalam satu loop dan mengubah posisinya sesuai urutan evaluasi yang dibutuhkan.

Tangani error di dalam loop

Loop memiliki elemen On Error yang posisinya berada di awal loop. Pilih perilaku saat request dalam loop mengalami error:

  • Ignore: lanjut ke request berikutnya.
  • Continue: lewati sisa request pada iterasi saat ini.
  • Break execution: hentikan loop lalu lanjutkan langkah setelah loop.
  • End execution: hentikan seluruh skenario.

Tambahkan Wait antar langkah

Gunakan elemen Wait jika layanan downstream membutuhkan waktu untuk memproses data.

Misalnya, setelah membuat pesanan:

POST /orders
Wait 1000 ms
GET /orders/{id}
Enter fullscreen mode Exit fullscreen mode

Nilai penundaan menggunakan milidetik.

Gunakan skrip untuk logika yang lebih kompleks

Jika operator kondisi tidak cukup, hitung kondisi melalui skrip pre-processor atau post-processor.

Sintaks {{variable}} tidak dapat digunakan langsung di dalam skrip. Gunakan:

pm.variables.get("$.2.response.body.token")
Enter fullscreen mode Exit fullscreen mode

Sesuaikan ID langkah dan jalur field dengan skenario Anda.

Untuk pola request berantai dan penerusan data yang lebih luas, lihat:

Skenario tidak dapat mereferensikan dirinya sendiri. Batasan ini mencegah loop tak terbatas saat skenario disarangkan.

Otomatiskan skenario dengan Apidog CLI

Skenario yang sama dapat dijalankan tanpa antarmuka melalui Apidog CLI, sehingga cocok untuk CI.

Instal CLI dan login menggunakan access token:

npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
Enter fullscreen mode Exit fullscreen mode

Jalankan skenario berdasarkan ID:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
Enter fullscreen mode Exit fullscreen mode

Parameter yang digunakan:

  • -t: ID Test Scenario.
  • -e: ID environment.
  • -r: reporter.

Pilihan reporter:

# Output konsol
-r cli

# Laporan HTML dan output konsol
-r html,cli

# Laporan JUnit untuk CI
-r junit
Enter fullscreen mode Exit fullscreen mode

Percabangan akan dievaluasi sama seperti saat dijalankan dari aplikasi:

  1. CLI menjalankan login.
  2. CLI membaca respons login.
  3. CLI memilih blok If atau Else.
  4. Exit code mencerminkan hasil eksekusi.

Artinya, kegagalan login dapat langsung menggagalkan build CI Anda.

Referensi implementasi:

FAQ

Apa perbedaan Conditional Branching dan loop di Apidog?

Conditional Branching membuat satu keputusan: menjalankan atau melewati sebuah blok berdasarkan kondisi. Loop menjalankan blok berulang kali.

Gunakan percabangan untuk logika seperti:

Jika login berhasil, jalankan checkout.
Enter fullscreen mode Exit fullscreen mode

Gunakan For atau ForEach untuk memproses banyak nilai:

Untuk setiap ID pesanan, jalankan GET /orders/{id}.
Enter fullscreen mode Exit fullscreen mode

Lihat tutorial loop ForEach untuk detail iterasi.

Mengapa Retrieve pre-step data kosong?

Biasanya karena salah satu dari dua hal:

  1. Fitur ini hanya bekerja di modul Test, bukan modul API.
  2. Anda menjalankan satu langkah secara terpisah, bukan seluruh skenario.

Jalankan skenario lengkap agar respons dari langkah sebelumnya tersedia.

Bisakah saya bercabang berdasarkan field di response body?

Ya. Gunakan referensi seperti:

{{$.1.response.body.status}}
Enter fullscreen mode Exit fullscreen mode

Atau ekstrak nilainya ke variabel bernama. Setelah itu, gunakan operator seperti Equals, Contains, atau In List.

Panduan cara meneruskan data antar langkah tes membahas pola ini lebih lanjut.

Bagaimana menggunakan variabel di dalam skrip?

Jangan gunakan {{variable}} secara langsung di skrip. Gunakan:

pm.variables.get("$.2.response.body.token")
Enter fullscreen mode Exit fullscreen mode

Sesuaikan ID langkah dan jalur field dengan data yang ingin diambil.

Apakah percabangan membutuhkan paket tambahan atau self-hosted?

Dokumentasi Apidog tidak mencantumkan batasan paket maupun perbedaan cloud-versus-self-hosted untuk kontrol alur, percabangan kondisional, loop, atau penerusan data. Jika Anda dapat membuat skenario, Anda dapat menambahkan percabangan.

Kesimpulan

Tes linear hanya menunjukkan bahwa ada sesuatu yang rusak. Tes dengan percabangan menunjukkan lokasi kegagalan dan mencegah request lanjutan yang tidak lagi valid.

Untuk menerapkannya:

  1. Tambahkan Conditional Branching.
  2. Ambil respons langkah sebelumnya dengan Retrieve pre-step data atau variabel hasil ekstraksi.
  3. Konfigurasikan kondisi If.
  4. Tambahkan jalur + Else.
  5. Jalankan skenario penuh untuk memverifikasi kedua jalur.
  6. Gunakan apidog run untuk menjalankan logika yang sama di CI.

Coba Apidog gratis dan ubah tes API linear menjadi skenario yang dapat mengambil keputusan berdasarkan respons sebenarnya.

Top comments (0)