Kode status hijau bisa menipu. Endpoint POST /orders mungkin mengembalikan 201 Created, body respons tampak benar, dan assertion HTTP lulus. Namun, apakah data benar-benar tersimpan di database dengan status yang tepat? Apakah inventaris berkurang? Pengujian yang hanya memeriksa respons HTTP memvalidasi apa yang API katakan, bukan apa yang sistem lakukan. Untuk menutup celah ini, verifikasi database secara langsung.
Dengan kueri database di dalam skenario pengujian, Anda dapat menyiapkan data awal, menjalankan request API, lalu memeriksa tabel untuk memastikan perubahan benar-benar tersimpan. Apidog menyediakan Koneksi Database dan prosesor Operasi Database untuk menjalankan SQL atau NoSQL dalam skenario yang sama dengan request HTTP—tanpa skrip eksternal. Jika Anda baru membuat skenario, baca panduan cara menulis skenario pengujian dengan Apidog. Untuk dasar penyimpanan relasional, lihat ikhtisar sisi server dari MDN.
Manfaat operasi database dalam pengujian
Pengujian API tanpa akses database adalah pengujian kotak hitam: ia memercayai respons API. Ini tidak cukup untuk menangkap bug seperti:
- Kolom status tidak pernah diperbarui.
- Foreign key mengarah ke data yang salah.
- Soft delete berubah menjadi hard delete.
- API mengembalikan sukses, tetapi transaksi database gagal atau tidak lengkap.
Langkah database memberi Anda tiga kemampuan utama:
- Menyemai data awal agar pengujian tidak bergantung pada data sisa.
- Memverifikasi persistensi dengan membaca data yang diklaim API telah ditulis.
- Mengekstrak nilai nyata dari database untuk request berikutnya.
Di Apidog, alurnya terdiri dari dua bagian:
- Buat koneksi di Pengaturan > Koneksi Database.
- Tambahkan Operasi Database sebagai:
- Pre Processor untuk berjalan sebelum request.
- Post Processor untuk berjalan setelah request.
Satu koneksi dapat digunakan ulang di seluruh skenario proyek.
Cakupan paket: MySQL, SQL Server 2014+, PostgreSQL, dan Oracle tersedia pada paket gratis. ClickHouse, MongoDB, dan Redis memerlukan paket berbayar.
Langkah 1: Buat koneksi database
Buka Pengaturan > Koneksi Database, lalu klik + Baru.
Pilih jenis database dan isi detail koneksi:
-
Host — misalnya
db.staging.internalatau127.0.0.1 -
Port — MySQL biasanya
3306 - Nama Pengguna
- Kata Sandi
-
Nama Database — misalnya
shop
Jika database berada di balik bastion host, buka bagian SSH Tunnel lalu tambahkan detail jump host.
Untuk MySQL, pilih mode SSL yang didukung server:
PreferRequireVerify CAVerify Full
Gunakan opsi paling ketat yang tersedia, lalu klik Simpan.
Troubleshooting koneksi MySQL 8
Plugin default MySQL 8, caching_sha2_password, dapat menyebabkan koneksi ditolak. Jika autentikasi gagal, ubah plugin user:
ALTER USER 'tester'@'%'
IDENTIFIED WITH mysql_native_password BY '...';
Lalu coba sambungkan kembali. Detail plugin tersedia di Manual Referensi MySQL.
Detail koneksi disimpan secara lokal dan tidak disinkronkan ke cloud. Setiap anggota tim perlu mengonfigurasi koneksinya sendiri. Lihat juga panduan berbagi pengaturan koneksi database.
Langkah 2: Semai data dengan Pre Processor
Misalnya, Anda menguji pembuatan pesanan. Sebelum membuat order, pastikan pelanggan yang digunakan oleh test sudah ada dan berstatus aktif.
Pada request Anda:
- Buka Pre Processor.
- Pilih Tambah Prosesor Database > Operasi Database.
- Beri nama langkah, misalnya
seed customer. - Pilih koneksi MySQL.
- Tambahkan SQL berikut:
INSERT INTO customers (id, email, status)
VALUES ({{customer_id}}, '{{customer_email}}', 'active')
ON DUPLICATE KEY UPDATE status = 'active';
Variabel dinamis memakai format {{variable_name}}.
Dengan pola ini, test selalu memiliki kondisi awal yang konsisten:
- Customer tersedia.
- Status customer aktif.
- ID customer sudah diketahui.
- Test tidak bergantung pada urutan eksekusi test lain.
Langkah 3: Verifikasi database dengan Post Processor
Sekarang jalankan request untuk membuat pesanan:
POST /api/orders
Content-Type: application/json
{
"customer_id": {{customer_id}},
"items": [{ "sku": "APRON-01", "qty": 2 }]
}
Asumsikan respons API menghasilkan ID pesanan dan Anda menyimpannya ke variabel order_id.
Setelah itu:
- Buka Post Processor.
- Pada Mode DESAIN, buka tab Run.
- Pada Mode DEBUG, buka tab Request.
- Pilih Tambah PostProcessor > Operasi Database.
- Beri nama
verify order row. - Pilih koneksi database.
- Jalankan kueri berikut:
SELECT id, status, total_cents
FROM orders
WHERE id = {{order_id}};
Hasil query dikembalikan sebagai array objek. Untuk mengambil status pada baris pertama, gunakan Ekstrak Hasil ke Variabel:
-
Nama Variabel:
db_order_status - Ekspresi JSONPath:
$[0].status
Klik Kirim, lalu periksa Konsol untuk melihat hasil mentah dan nilai yang diekstrak.
Selanjutnya, buat assertion bahwa db_order_status harus bernilai pending atau status yang diharapkan.
Dengan ini, test akan gagal jika API mengembalikan 201 Created tetapi database menyimpan status = 'draft'.
Langkah 4: Gunakan nilai database pada request berikutnya
Database sering menyimpan nilai internal yang tidak dikirimkan dalam respons API.
Contoh: pembuatan order menghasilkan fulfillment_ref, tetapi nilai tersebut tidak ada di body respons. Request berikutnya membutuhkan nilai itu:
GET /api/fulfillments/{{fulfillment_ref}}
Tambahkan kueri pada Post Processor:
SELECT fulfillment_ref
FROM orders
WHERE id = {{order_id}};
Lalu ekstrak hasilnya:
-
Nama Variabel:
fulfillment_ref - Ekspresi JSONPath:
$[0].fulfillment_ref
Request berikutnya dapat memakai {{fulfillment_ref}} langsung pada URL atau body request.
Pola ini mirip dengan merangkai data dari respons HTTP, tetapi sumber kebenarannya adalah tabel database. Lihat panduan melewatkan data antar langkah pengujian dan orkestrasi pengujian API dan melewatkan data.
MongoDB dan Redis: varian NoSQL
MongoDB dan Redis menggunakan alur yang sama: buat koneksi, tambahkan Operasi Database, lalu jalankan sebelum atau sesudah request API.
Keduanya adalah fitur berbayar. Untuk referensi field lengkap, lihat dokumentasi Apidog.
MongoDB
Tambahkan langkah Operasi Database dan pilih MongoDB.
Alih-alih SQL, gunakan dropdown Tipe Operasi:
- Temukan
- Sisipkan
- Perbarui
- Hapus
- Jalankan Perintah Database
Untuk operasi CRUD, isi Nama Koleksi dan Kondisi Kueri dalam JSON:
{ "_id": "65486728456e79993a150f1c" }
Apidog dapat mengonversi string ID yang sesuai menjadi ObjectId secara otomatis.
Untuk tipe BSON, Anda dapat menggunakan:
ISODate(...)ObjectId(...)NumberDecimal(...)NumberLong(...)
Referensi tipe data tersedia di dokumentasi MongoDB.
Dokumentasi MySQL menjelaskan ekstraksi JSONPath ke variabel. Dokumentasi MongoDB dan Redis tidak menjelaskan mekanisme Ekstrak Hasil ke Variabel yang identik. Gunakan MongoDB untuk menyemai dan memverifikasi data, lalu validasi perilaku ekstraksi terlebih dahulu melalui Konsol.
Redis
Koneksi Redis membutuhkan:
- Host
- Port
- Kata Sandi
- Indeks Database
Operasi visual mendukung:
- GET
- SET
- DELETE
Untuk membaca sesi cache, pilih GET dan masukkan key seperti:
user:session:123
Jika perintah yang diperlukan tidak ada di dropdown, gunakan tab Jalankan Perintah Redis:
KEYS user:*
Pola ini berguna untuk:
- Memastikan API telah menulis cache.
- Menghapus cache sebelum test.
- Memastikan endpoint mengisi ulang cache.
Variasi dan batasan lanjutan
Sebelum membuat suite besar, perhatikan hal berikut:
-
Perulangan: Dalam langkah
ForEach, referensikan item saat ini dengan{{$.StepID.element.field}}, denganStepIDsebagai nomor langkah perulangan. - Percabangan berdasarkan nilai database: Ekstrak status dari database, lalu arahkan skenario berdasarkan nilai tersebut. Kombinasikan dengan logika kondisional dalam skenario pengujian API.
- Routing environment: Buat koneksi terpisah untuk setiap environment.
- Prosedur tersimpan: Antarmuka visual tidak menangani operasi kompleks seperti stored procedure. Gunakan SQL yang sederhana dan langsung.
- Oracle: Oracle Client harus terpasang di mesin Anda sebelum koneksi dapat dibuat.
Menangani kredensial per environment
Jangan biarkan test staging secara tidak sengaja berjalan terhadap produksi.
Buat satu koneksi database untuk setiap environment, misalnya:
localstagingproduction
Masing-masing menggunakan host, username, dan password yang berbeda.
Saat Anda mengganti environment melalui dropdown di kanan atas, Apidog merutekan operasi database ke koneksi yang sesuai:
- Pilih
staging→ query berjalan terhadap database staging. - Pilih
local→ query berjalan terhadap database lokal.
SQL dan langkah skenario tidak perlu diedit.
Karena kredensial disimpan lokal dan tidak disinkronkan, password produksi juga tidak ikut masuk ke proyek cloud bersama.
Otomatiskan alur dengan Apidog CLI
Setelah skenario berjalan di aplikasi, masukkan ke CI agar setiap pull request juga memverifikasi database.
Instal CLI dan autentikasi:
npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
Jalankan skenario berdasarkan ID dan environment:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
Parameter yang digunakan:
-
-t: ID skenario pengujian -
-e: ID environment -
-r: reporter, misalnyacli,html, ataujunit
Untuk menggunakan beberapa reporter:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r html,cli
Koneksi database bersifat lokal, jadi runner CI tetap memerlukan konfigurasi yang diekspor agar dapat terhubung ke database target.
Jika skenario menggunakan dataset, baca pengujian berbasis data dengan Apidog CLI. Untuk eksekusi berkala, lihat penjadwalan pengujian API dengan Apidog.
Pertanyaan yang sering diajukan
Database mana yang gratis dan mana yang berbayar?
MySQL, SQL Server 2014+, PostgreSQL, dan Oracle tersedia pada paket gratis. ClickHouse, MongoDB, dan Redis memerlukan paket berbayar. Anda dapat mengunduh Apidog untuk mencoba koneksi database gratis.
Bisakah saya menggunakan nilai database pada request berikutnya?
Bisa. Tambahkan Post Processor dengan Operasi Database, jalankan SELECT, lalu gunakan Ekstrak Hasil ke Variabel.
Contoh JSONPath:
$[0].fulfillment_ref
Gunakan nilainya pada request berikutnya dengan:
{{fulfillment_ref}}
Apakah rekan tim otomatis mendapatkan koneksi database saya?
Tidak. Kredensial koneksi disimpan di setiap klien secara lokal dan tidak disinkronkan ke cloud.
Mengapa koneksi MySQL 8 saya gagal?
MySQL 8 menggunakan caching_sha2_password secara default, yang dapat memblokir koneksi. Ubah user ke mysql_native_password:
ALTER USER ... IDENTIFIED WITH mysql_native_password;
Bisakah saya menjalankan stored procedure?
Tidak melalui antarmuka visual. Dukungan utamanya adalah pernyataan standar seperti SELECT, INSERT, UPDATE, dan DELETE.
Kesimpulan
Kueri database mengubah pengujian API dari “respons terlihat benar” menjadi “data benar-benar tersimpan dengan benar”.
Gunakan pola berikut:
- Semai data awal melalui Pre Processor.
- Jalankan request API.
- Verifikasi data melalui Post Processor.
- Ekstrak nilai database untuk request berikutnya.
- Pisahkan koneksi per environment agar test tetap aman.
Mulai dengan satu test sederhana: unduh Apidog, hubungkan database dev Anda, lalu tambahkan Post Processor yang membaca kembali baris yang baru dibuat oleh API.

Top comments (0)