k6 Load Testing: Panduan Praktis untuk API

Panduan praktis pengujian beban k6: instal k6, tulis skrip pertama Anda, atur VU, tahapan, dan ambang batas, baca hasil p95/p99, dan jalankan di CI.

Ashley Goolam

Ashley Goolam

25 June 2026

k6 Load Testing: Panduan Praktis untuk API

Apidog untuk Perusahaan

Penerapan On-Premises

SSO & RBAC

Sesuai SOC 2

Jelajahi Apidog Enterprise

Jika API Anda berfungsi dengan baik untuk satu pengguna tetapi tumbang di bawah lalu lintas, Anda memerlukan pengujian beban (load testing), dan k6 adalah salah satu cara paling bersih untuk melakukannya. Panduan ini mencakup apa itu k6, cara menginstalnya, cara menulis skrip pertama Anda, dan cara membaca hasilnya, sehingga Anda dapat memperlakukan pengujian beban sebagai bagian dari rutinitas pengujian kinerja API normal Anda. Kami juga akan melihat bagaimana k6 cocok dengan pengujian fungsional di CI, mengacu pada dokumentasi k6 resmi di mana detailnya penting.

Apa itu k6?

k6 adalah alat pengujian beban sumber terbuka, yang kini dikelola oleh Grafana. Anda menulis pengujian Anda sebagai file JavaScript, k6 menjalankannya dengan mesin Go yang cepat, dan menyerbu endpoint Anda dengan lalu lintas simulasi. Pembagian ini disengaja: Anda membuat pengujian dalam bahasa yang sebagian besar pengembang sudah ketahui, tetapi generator beban itu sendiri berjalan sebagai Go yang dikompilasi, sehingga satu mesin dapat menjalankan banyak pengguna virtual tanpa kesulitan.

k6 dibangun untuk satu pekerjaan dan melakukannya dengan baik: menghasilkan beban yang berkelanjutan, berulang, dan mengukur bagaimana sistem Anda merespons. Ini melaporkan persentil latensi, laju permintaan, laju kesalahan, dan memungkinkan Anda menetapkan aturan lulus/gagal pada angka-angka tersebut. Fokus itulah intinya. k6 bukanlah klien API, alat dokumentasi, atau kerangka kerja pengujian fungsional. Ini adalah mesin beban (load engine).

Beberapa istilah yang akan sering Anda temui:

Menginstal k6

k6 dikirimkan sebagai satu berkas biner (binary), jadi instalasinya singkat. Di macOS dengan Homebrew:

brew install k6

Di Windows dengan Chocolatey:

choco install k6

Di Debian atau Ubuntu, tambahkan repositori apt Grafana dan instal:

sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg \
  --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" \
  | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6

Konfirmasi bahwa itu berfungsi:

k6 version

Citra Docker juga tersedia jika Anda lebih memilih untuk tidak menginstal apa pun secara lokal. Periksa halaman instalasi dalam dokumentasi untuk perintah-perintah terkini, karena detail paket dapat berubah seiring waktu.

Skrip k6 pertama Anda

Pengujian k6 adalah modul JavaScript dengan fungsi default. k6 memanggil fungsi tersebut sekali per iterasi, per VU. Berikut adalah skrip minimal yang mengakses satu endpoint dan memeriksa respons:

import http from 'k6/http';
import { check, sleep } from 'k6';

export default function () {
  const res = http.get('https://test-api.example.com/users');

  check(res, {
    'status is 200': (r) => r.status === 200,
    'body is not empty': (r) => r.body.length > 0,
  });

  sleep(1);
}

Simpan sebagai script.js dan jalankan:

k6 run script.js

Secara default, k6 menjalankan satu VU untuk satu iterasi. `sleep(1)` itu menambahkan jeda satu detik di antara iterasi, yang meniru pengguna sungguhan yang berhenti sejenak di antara tindakan. Tanpa sleep, setiap VU berulang secepat yang diizinkan oleh jaringan, yang berguna untuk pengujian throughput mentah tetapi tidak realistis untuk simulasi perilaku pengguna.

Panggilan `check()` adalah penegasan lunak (soft assertions). Pemeriksaan yang gagal muncul dalam ringkasan tetapi tidak menghentikan jalannya pengujian. Itu disengaja. Di bawah beban berat, Anda mengharapkan beberapa kegagalan, dan Anda ingin pengujian terus mengukur sehingga Anda dapat melihat seberapa buruknya itu.

VU, Tahap, dan Ambang Batas

Skrip pertama menjalankan satu pengguna sekali. Pengujian beban yang sebenarnya adalah tentang mengontrol berapa banyak pengguna yang mengakses API Anda dan berapa lama. Anda mengkonfigurasinya dengan objek `options` yang diekspor.

Bentuk paling sederhana menetapkan jumlah VU tetap dan durasi:

export const options = {
  vus: 50,
  duration: '30s',
};

Itu menjalankan 50 pengguna virtual selama 30 detik. Yang lebih berguna adalah profil ramping yang dibangun dari beberapa tahap, yang memungkinkan Anda mensimulasikan lalu lintas yang naik, bertahan, dan turun:

export const options = {
  stages: [
    { duration: '1m', target: 100 },  // naik ke 100 VU
    { duration: '3m', target: 100 },  // tahan di 100 VU
    { duration: '1m', target: 0 },    // turun ke 0
  ],
  thresholds: {
    http_req_duration: ['p(95)<500'],   // 95% permintaan di bawah 500ms
    http_req_failed: ['rate<0.01'],     // kurang dari 1% kesalahan
  },
};

Ambang batas (Thresholds) adalah di mana k6 mendapatkan tempatnya di CI. Jika ambang batas gagal, k6 keluar dengan kode non-nol. Itu berarti langkah pipeline dapat menggagalkan build ketika latensi atau tingkat kesalahan melewati batas yang Anda tetapkan. Anda mengkodekan anggaran kinerja sebagai kode, dengan cara yang sama Anda akan mengkodekan penegasan fungsional.

Peta singkat profil beban umum dan pertanyaan yang dijawab oleh masing-masing profil:

Profil Tujuan Apa yang dikatakannya kepada Anda
Smoke Beban kecil, verifikasi skrip berjalan Pengujian itu sendiri benar
Load Lalu lintas normal yang diharapkan Apakah API bertahan dari hari ke hari
Stress Dorong melewati puncak yang diharapkan Di mana ia mulai rusak
Spike Lonjakan tajam mendadak pada VU Bisakah ia bertahan dari lonjakan lalu lintas
Soak Beban moderat selama berjam-jam Kebocoran memori, degradasi lambat

Anda tidak memerlukan kelimanya. Mulai dengan smoke dan load. Tambahkan stress dan spike setelah Anda mengetahui angka normal Anda. Untuk survei yang lebih luas tentang pendekatan dan metrik di baliknya, dasar-dasar pengujian kinerja berlaku untuk setiap alat, tidak hanya k6.

Membaca Hasil k6

Ketika sebuah pengujian selesai, k6 mencetak ringkasan ke terminal. Baris-baris yang paling penting:

Bacalah persentil, bukan rata-rata. Waktu respons rata-rata 200ms terdengar baik-baik saja sampai Anda melihat p99 sebesar 4 detik, yang berarti satu dari seratus pengguna menunggu empat detik. Ekor itu adalah tempat pengguna berganti.

Untuk apa pun di luar pengamatan terminal, k6 dapat mengalirkan hasil ke keluaran eksternal. Ini menulis JSON atau CSV, dan berintegrasi dengan dasbor Grafana dan Prometheus untuk analisis visual secara langsung selama pengujian. Pasangan itu, k6 ditambah Grafana, adalah mengapa Anda akan sering melihat alat ini disebut "grafana k6." Untuk pengujian sekali jalan, ringkasan terminal sudah cukup; untuk pemantauan berkelanjutan, kirim metrik ke tempat Anda dapat membuat grafik.

Di mana k6 berperan, dan di mana Apidog berperan

k6 adalah mesin beban. Ini menjawab "bagaimana sistem saya berperilaku di bawah lalu lintas yang berkelanjutan." Ini tidak memeriksa apakah API Anda mengembalikan data yang benar, sesuai kontraknya, atau menangani otentikasi dengan benar di setiap endpoint. Itu adalah pertanyaan pengujian fungsional dan kontrak, dan mereka membutuhkan alat yang berbeda.

Inilah pembagian yang perlu dijaga agar tetap jelas. Anda menginginkan kedua jenis pengujian dalam pipeline Anda, dan keduanya tidak bersaing:

Perhatian Terbaik ditangani oleh Apa yang dijawabnya
Beban berat berkelanjutan, persentil dalam skala besar k6 Apakah tetap cepat di bawah lalu lintas
Kebenaran fungsional, kontrak, otentikasi Apidog Apakah mengembalikan hal yang benar
Regresi di CI pada setiap commit Apidog (apidog run) Apakah perubahan ini merusak endpoint
Anggaran kinerja di CI Ambang batas k6 Apakah latensi atau kesalahan melewati batas

Apidog menangani sisi kebenaran. Anda mendesain atau mengimpor API Anda, membangun skenario pengujian dengan penegasan visual, dan menjalankannya di CI dengan apidog run, dengan cara yang sama Anda akan menjalankan skrip k6. Panduan Apidog CLI menjelaskan cara menghubungkan pengujian fungsional tersebut ke dalam sebuah pipeline. Apidog juga menyertakan fitur pengujian kinerja yang lebih ringan untuk pemeriksaan cepat, dibahas dalam panduan pengujian kinerja API di Apidog, tetapi ini bukanlah generator beban kelas k6 dan tidak mencoba untuk menjadi itu.

Alur kerja praktis terlihat seperti ini. Pada setiap commit, Apidog menjalankan pengujian fungsional dan kontrak Anda untuk memastikan API masih melakukan apa yang seharusnya. Berdasarkan jadwal atau sebelum rilis, k6 menjalankan profil beban terhadap lingkungan staging untuk memastikan API tetap cepat di bawah lalu lintas. Gerbang kebenaran dan gerbang kinerja, masing-masing dengan alat yang dibangun untuknya.

Jika Anda membandingkan mesin sebelum berkomitmen, k6 bersanding dengan JMeter, Gatling, dan Locust. Ikhtisar alat pengujian beban dan perbandingan alternatif Locust ini menjelaskan kompromi jika bahasa skrip atau skala mengubah pilihan Anda.

Pertanyaan yang sering diajukan

Apakah k6 gratis?

Ya. k6 adalah sumber terbuka di bawah lisensi AGPL, dan biner tersebut gratis untuk dijalankan secara lokal tanpa batasan pengguna virtual di luar perangkat keras Anda sendiri. Grafana juga menawarkan k6 Cloud, layanan berbayar untuk menjalankan pengujian terdistribusi besar dan menyimpan hasilnya, tetapi Anda tidak pernah harus menggunakannya. Alat inti mencakup sebagian besar tim. Jika Anda ingin meninjau opsi gratis lainnya terlebih dahulu, gambaran umum alat pengujian beban mencantumkan apa yang ditawarkan masing-masing.

Apakah saya perlu tahu JavaScript untuk menggunakan k6?

Anda memerlukan JavaScript dasar, bukan keahlian mendalam. Sebagian besar skrip k6 adalah fungsi default, beberapa panggilan `http.get` atau `http.post`, beberapa pemeriksaan, dan objek opsi. Jika Anda bisa membaca contoh dalam panduan ini, Anda bisa menulis pengujian yang berfungsi. Tidak ada langkah build dan tidak ada kerangka kerja yang perlu dipelajari, hanya API k6.

Apa perbedaan antara k6 dan Apidog untuk pengujian kinerja?

k6 adalah generator beban khusus yang dibangun untuk mendorong lalu lintas berat yang berkelanjutan dan melaporkan persentil dalam skala besar. Apidog adalah platform API yang berfokus pada desain, pengujian fungsional, dan pengujian kontrak, dengan fitur pengujian kinerja yang lebih ringan untuk pemeriksaan cepat. Gunakan k6 saat Anda membutuhkan beban nyata dan anggaran kinerja CI. Gunakan Apidog untuk kebenaran, validasi kontrak, dan menjalankan pengujian fungsional pada setiap commit. Keduanya memecahkan masalah yang berbeda dan bekerja sama dengan baik.

Bisakah saya menjalankan k6 di CI/CD?

Ya, dan ini adalah pengaturan yang umum. k6 keluar dengan kode non-nol ketika ambang batas gagal, sehingga sistem CI apa pun dapat menggagalkan build pada regresi kinerja. Jalankan `k6 run script.js` sebagai langkah pipeline, arahkan ke lingkungan staging, dan tetapkan ambang batas untuk latensi p95 dan tingkat kesalahan. Pasangkan dengan pengujian fungsional dari `apidog run` agar setiap commit mendapatkan pemeriksaan kebenaran dan pemeriksaan beban.

Kesimpulan

k6 memberi Anda cara yang bersih dan dapat diskrip untuk memberikan beban nyata pada API Anda dan mengukur apa yang terjadi. Instal binari, tulis file JavaScript singkat, atur VU dan tahap, tambahkan ambang batas, dan baca persentilnya. Itulah seluruh alurnya. Pisahkan pengujian beban dari pengujian fungsional, karena masing-masing menjawab pertanyaan yang berbeda, dan jalankan keduanya di CI agar tidak ada yang terlewat.

Untuk sisi kebenaran dari pembagian itu, Apidog memungkinkan Anda mendesain, menguji, mem-mock, dan mendokumentasikan API Anda di satu tempat, lalu menjalankan pengujian fungsional di CI dengan `apidog run`. Unduh Apidog untuk menggabungkan kepercayaan tingkat kontrak dengan pengujian beban k6 Anda.

button

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.