Menyiapkan tiga fondasi sebelum belajar k6: konsep load testing dan performance testing, protokol modern seperti HTTP, WebSocket, dan GraphQL, serta dasar JavaScript ES6. Lalu memasang binary k6 di Linux, macOS, atau Windows, lengkap dengan verifikasi instalasi.

Selamat datang di series Belajar k6! Series ini membawa kalian dari nol hingga mahir load testing dan performance testing modern menggunakan k6 — tool open-source dari Grafana Labs yang ditulis dalam Go dengan scripting JavaScript. Total 19 episode yang disusun berjenjang: dimulai dari pre-requisites dan setup environment, sejarah k6 dari Load Impact hingga diakuisisi Grafana Labs, konsep virtual users dan lifecycle test, menulis script k6 pertama, HTTP API load testing, dynamic data dan cookies, modularisasi script, konfigurasi load test dan environment variables, data-driven testing, skenario kompleks multi-endpoint, jaringan TLS dan WebSocket, otentikasi OAuth2 dan JWT, keamanan testing, analisis performansi dan optimasi, observability dengan Grafana, InfluxDB, dan Prometheus, resilience dan failure analysis, k6 di CI/CD, distributed dan cloud load testing, hingga production readiness dengan ekstensi xk6.
Mengapa k6 layak kalian pelajari? Karena k6 merombak paradigma load testing klasik: alih-alih tool GUI berat yang menghabiskan gigabyte RAM, k6 adalah binary tunggal berbasis Go yang konsumsi memory-nya kecil, skrip ditulis dalam JavaScript sehingga semua developer bisa ikut menulis, dan hasilnya terintegrasi alami dengan observability stack — menjadikannya standar de-facto untuk performance testing di era API dan microservices.
Episode 0 ini adalah peta jalan dan lapisan fondasi. Kita akan memastikan tiga hal: (1) skill konseptual yang wajib kalian pegang, (2) pemahaman singkat protokol dan teknologi yang akan diuji, dan (3) environment kerja yang benar-benar siap — mulai dari binary k6 yang terpasang hingga editor yang nyaman. Jangan lompat-lompat; fondasi yang goyah membuat episode berikutnya terasa berat. Mari mulai.
Sebelum menulis satu baris skrip, kalian harus paham perbedaan dua payung istilah ini. Performance testing adalah istilah umum untuk segala bentuk pengujian yang mengukur bagaimana sistem berperilaku dalam kondisi tertentu. Di dalamnya terdapat beberapa genre, dan load testing adalah salah satunya:
| Genre | Fokus Pertanyaan | Contoh Skenario |
|---|---|---|
| Load Testing | Bisakah sistem menangani beban normal sampai puncak? | 500 user bersamaan login |
| Stress Testing | Di titik mana sistem mulai rusak? | Naikkan user sampai error |
| Soak Testing | Apakah performa stabil dalam durasi panjang? | Beban normal selama 4 jam |
| Spike Testing | Bagaimana reaksi terhadap lonjakan mendadak? | Traffic naik 5x dalam 1 menit |
| Endurance Testing | Apakah memory/leak muncul seiring waktu? | Beban konstan selama 24 jam |
Functional testing menjawab pertanyaan "apakah sistem melakukan hal yang benar?" — endpoint login mengembalikan status 200 dan token yang valid. Non-functional testing menjawab "apakah sistem melakukannya dengan cukup cepat dan stabil?" — status 200 direspons dalam 250 milidetik untuk 95% request, bahkan saat 500 user aktif. k6 menangani keduanya sekaligus: lewat check() kalian memvalidasi kebenaran fungsional, lewat thresholds dan metrics kalian mengukur kualitas non-fungsional.
Bayangkan perbedaan ini seperti menguji sebuah restoran: functional testing memastikan menu sampai ke meja dengan benar, non-functional testing memastikan pelayanan tetap cepat dan ramah saat restoran penuh sesak di jam makan siang.
k6 lahir sebagai tool performance testing API, jadi kalian wajib mengenal bahasa yang dipakai API modern.
HTTP adalah protokol komunikasi antara client dan server berbasis request-response. Kalian harus memahami setidaknya: method (GET, POST, PUT, PATCH, DELETE), status code (200, 201, 400, 401, 403, 404, 429, 500), header (terutama Content-Type dan Authorization), serta perbedaan HTTP dan HTTPS (HTTPS = HTTP di atas lapisan TLS yang terenkripsi). Semua ini akan kalian tulis langsung di dalam skrip k6.
WebSocket adalah protokol yang membuka koneksi dua arah yang persisten antara client dan server — kontras dengan HTTP yang bersifat request-response satu per satu. Koneksi WebSocket dipakai untuk aplikasi real-time: chat, notifikasi, live streaming data. k6 punya modul khusus untuk menguji WebSocket, dan episode 11 series ini akan membahasnya mendalam. Untuk episode 0, cukup tahu kapan sebuah aplikasi memakai WebSocket dan mengapa ia beda dari HTTP biasa.
GraphQL adalah bahasa query untuk API yang memungkinkan client meminta hanya field yang dibutuhkan dalam satu request. REST memecah resource menjadi banyak endpoint, GraphQL memusatkannya dalam satu endpoint (biasanya /graphql) dengan body query berformat JSON. API modern yang lain yang wajib dikenal: gRPC (protokol RPC berbasis protobuf yang sangat cepat) dan REST itu sendiri. k6 mendukung pengujian REST, GraphQL (lewat body query), dan gRPC via ekstensi. Tidak masalah jika kalian belum mahir semua — yang penting mengenal bentuknya.
Ini yang paling krusial: skrip k6 ditulis dalam JavaScript, dan mesinnya mematuhi standar ECMAScript dengan dukungan penuh untuk fitur ES6 seperti const, let, arrow function, template literal, destructuring, dan spread operator. Kalian tidak perlu menjadi frontend engineer, tapi wajib paham dasar bahasa: variabel, function, object, array, for loop, dan JSON (JSON.stringify / JSON.parse). Karena k6 tidak berjalan di Node.js (ia memakai mesin ECMAScript Go bernama goja), beberapa hal yang biasa di Node — seperti fs, require dari npm, atau console.log yang sangat lengkap — punya keterbatasan. Kita akan bedah detail arsitektur ini di episode 2.
k6 menghasilkan metrik untuk setiap pengujian: http_req_duration (lama satu request), http_req_failed (rasio kegagalan), http_reqs (throughput), dan banyak lagi. Kalian wajib paham konsep dasar metrik dan monitoring: apa itu percentile (p95, p99 — artinya 95% atau 99% request selesai di bawah nilai itu), apa itu time series, dan bagaimana metrik dialirkan ke sistem observability seperti Prometheus atau Grafana. Konsep ini akan dipakai terus di seluruh series.
Cara termudah dan paling teruji adalah memasang binary resmi k6 dari kanal resmi tiap platform. k6 adalah satu file binary — tidak ada server terpisah, tidak ada agent yang berjalan. Perintah k6 run script.js adalah seluruh yang kalian butuhkan untuk mulai.
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/grafana.gpg --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y k6Alternatif yang sama validnya untuk semua platform: unduh binary dari halaman releases GitHub k6, ekstrak, dan taruh di direktori yang masuk dalam $PATH. Karena k6 murni binary, cara ini bekerja identik di Linux, macOS, maupun Windows (kalian tinggal mengunduh varian arsitektur yang tepat).
Setelah terpasang, jalankan tes tensi paling sederhana:
k6 version
k6 inspect --helpKeluaran k6 version akan mencetak nomor versi seperti k6 v0.56.0 (2025-07-18T13:00:00.0000Z, go1.24.0, linux/amd64). Baris kedua memastikan subcommand inspect tersedia. Jika kedua perintah berjalan, environment kalian sudah siap menjalankan pengujian nyata.
Tip
Selalu cek rilis terbaru k6 di halaman releases resmi. k6 bergerak cepat — versi baru membawa perbaikan mesin ECMAScript, modul baru, dan perbaikan performa. Mengikuti rilis stable yang resmi adalah kebiasaan baik yang akan terbayar di episode-isode berikutnya.
Karena skrip k6 adalah JavaScript, editor dengan dukungan JavaScript wajib kalian miliki. VS Code dengan ekstensi JavaScript dan TypeScript bawaan sudah lebih dari cukup: syntax highlighting, auto-complete, dan error lint akan menangkap kesalahan sintaks sebelum skrip dijalankan. Jika kalian menyukai editor terminal, Neovim juga pilihan yang sangat baik. Satu hal penting: penamaan file skrip k6 umumnya menggunakan ekstensi .js, dan folder proyek load test sebaiknya terpisah dari aplikasi utama agar tidak tercampur.
Load testing mengharuskan kalian mengarahkan beban ke target yang nyata — entah https://test.k6.io untuk latihan atau endpoint internal tim kalian. Pastikan koneksi internet memadai, dan pahami bahwa beban yang dibangkitkan k6 dibatasi oleh bandwith dan resource mesin lokal kalian. Untuk skala besar, k6 menawarkan cloud execution dan distributed testing yang akan dibahas di episode 18.
k6 resmi menerbitkan image grafana/k6 di Docker Hub. Menjalankan k6 lewat Docker membuat environment selalu bersih dan seragam di semua mesin — sangat berguna untuk CI/CD. Contoh paling sederhana:
docker run --rm -i grafana/k6 run - < script.jsPerintah ini meneruskan isi script.js ke dalam kontainer melalui stdin, menjalankan test, lalu membuang kontainer (--rm) setelah selesai — tanpa meninggalkan sampah. Untuk pemakaian lanjutan, kalian akan me-mount folder script dengan -v sehingga k6 di dalam kontainer bisa membaca file: docker run --rm -v $(pwd):/scripts -w /scripts grafana/k6 run script.js. Episode 17 yang membahas CI/CD akan sangat bergantung pada pola ini.
k6 open-source berjalan penuh di lokal tanpa akun apa pun. Akun Grafana Cloud bersifat opsional untuk fitur cloud execution — tidak wajib untuk mengikuti series ini.tests/load/, dan simpan setiap skrip sebagai unit yang bisa dijalankan sendiri.k6 version. Mengecek versi adalah langkah diagnostik pertama saat fitur tidak tersedia atau perilaku aneh. Biasakan.Di episode 0 ini kalian telah menyiapkan tiga fondasi: skill konseptual (load vs performance testing, functional vs non-functional testing), pemahaman protokol (HTTP/HTTPS, WebSocket, GraphQL, dasar JavaScript ES6, konsep metrik dan percentile), serta environment yang siap (binary k6 terpasang dan terverifikasi, editor JavaScript, koneksi internet, dan opsi Docker).
Poin yang harus kalian bawa:
k6 run script.js adalah perintah inti; k6 version adalah pengecekan pertama saat ada masalah.grafana/k6) opsional tapi akan sangat membantu di fase CI/CD.Environment kalian sudah siap. Di episode 1 kita mundur sejenak untuk memahami sejarah, latar belakang, dan mengapa k6 lahir: dari Load Impact tahun 2017, open-source tahun 2018, akuisisi Grafana Labs tahun 2021, hingga perbandingan jujur dengan JMeter, Gatling, dan Locust — dan kapan kalian sebaiknya memilih k6. Sampai jumpa di episode 1!