Contoh Penggunaan k6 Automation Tools: Panduan Performance & Load Testing Modern
Dalam dunia pengujian dan pengembangan perangkat lunak modern (software engineering), memastikan aplikasi mampu menangani ribuan hingga jutaan pengguna secara bersamaan adalah hal yang krusial. Sebuah aplikasi web mungkin berjalan lancar ketika diuji oleh satu pengembang (developer), namun apa yang terjadi jika 1.000 pengguna mengaksesnya secara simultan?
Di sinilah k6 hadir sebagai solusi load testing dan performance automation tool yang sangat populer di kalangan pengembang dan tim Quality Assurance (QA).
Di artikel ini, kita akan membahas secara mendalam apa itu k6, fitur utamanya, contoh penggunaan k6 automation tools dengan berbagai skenario (dari pengujian API sederhana hingga integrasi otomatis di CI/CD), serta best practices dalam menggunakannya. 🚀
Apa Itu k6 Automation Tool?
Grafana k6 (sebelumnya dikenal sebagai LoadImpact k6) adalah alat open-source load testing berkinerja tinggi yang ditulis menggunakan bahasa Go, tetapi skrip pengujiannya ditulis menggunakan JavaScript (ES6).
k6 dirancang khusus untuk memenuhi kebutuhan developer dan tim DevOps modern (developer-centric performance testing). Tidak seperti alat load testing tradisional GUI seperti Apache JMeter yang menggunakan XML kompleks, k6 memungkinkan kamu menulis skrip pengujian berbasis kode (code-as-test) yang fleksibel dan mudah disimpan di dalam repositori Git.
Keunggulan Utama k6
- Ringan & Bebas Overhead: Mesin k6 ditulis dalam bahasa Go yang sangat efisien dalam penggunaan memori dan CPU saat mensimulasikan ribuan pengguna virtual (Virtual Users).
- Scripting dengan JavaScript: Pengembang tidak perlu mempelajari bahasa khusus. Kamu cukup menggunakan sintaksis JavaScript modern.
- Thresholds & Assertions (SLA): Kamu bisa menentukan kriteria lulus/gagal (pass/fail) berdasarkan Service Level Agreement (SLA) performa sistem.
- DevOps & CI/CD Native: Mudah diintegrasikan ke dalam pipeline otomatisasi seperti GitHub Actions, GitLab CI, Jenkins, atau Azure DevOps.
- Dukungan Protokol Luas: Mendukung HTTP/1.1, HTTP/2, WebSockets, gRPC, dan Redis.
Konsep Penting dalam k6
Sebelum masuk ke contoh skrip kode, ada beberapa istilah penting dalam k6 yang perlu kamu pahami:
- Virtual Users (VUs): Pengguna virtual yang mensimulasikan sesi pengguna nyata yang menjalankan skrip secara bersamaan.
- Iterations: Berapa kali skrip pengujian dieksekusi oleh VUs.
- Thresholds: Aturan atau ambang batas performa (misalnya: 95% request harus direspon di bawah 200ms). Jika ambang batas tidak terpenuhi, pengujian dianggap gagal (fail status exit code).
- Checks: Pengujian kondisi seperti status respons HTTP (
200 OK) atau isi dari body response (mirip sepertiassertdalam unit test).
[ Terminal / CI CD Pipeline ]
|
v
+-------------------+
| Grafana k6 CLI |
+-------------------+
/ | \
( VU 1 ) ( VU 2 ) ( VU 3 ... N )
| | |
+-----------+-----------+
|
( HTTP Requests )
v
+---------------------------+
| Target Server / API |
+---------------------------+
Cara Instalasi k6
k6 dapat diinstal dengan sangat mudah di berbagai sistem operasi:
1. Linux (Ubuntu / Debian)
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
2. macOS (via Homebrew)
brew install k6
3. Windows (via Winget atau Chocolatey)
winget install k6 --source winget
# Atau via Chocolatey:
choco install k6
4. Docker
docker run --rm -i grafana/k6 run - <script.js
Contoh 1: Pengujian HTTP Request Sederhana (Basic Test)
Mari buat skrip pengujian pertama bernama basic-test.js. Skrip ini akan melakukan GET request ke API publik k6 (https://test-api.k6.io/public/crocodiles/) dan mengecek apakah status responsnya adalah 200 OK.
import http from 'k6/http';
import { check, sleep } from 'k6';
// Konfigurasi opsi pengujian
export const options = {
vus: 10, // 10 Virtual Users
duration: '10s', // Berjalan selama 10 detik
};
export default function () {
// Mengirim HTTP GET request
const response = http.get('https://test-api.k6.io/public/crocodiles/');
// Memeriksa (check) apakah status HTTP bernilai 200
check(response, {
'status HTTP adalah 200': (r) => r.status === 200,
'waktu respon < 500ms': (r) => r.timings.duration < 500,
});
// Memberi jeda (think time) 1 detik antar pengulangan
sleep(1);
}
Cara Menjalankan:
Jalankan perintah berikut di terminal kamu:
k6 run basic-test.js
Penjelasan Output k6:
Setelah eksekusi selesai, k6 akan menampilkan metrik lengkap seperti:
http_req_duration: Total waktu respons HTTP (avg, min, med, max, p90, p95).http_req_failed: Persentase request yang gagal.checks: Persentase validasi check yang berhasil (misal:100.00%).iterations: Jumlah total eksekusi fungsidefault.
Contoh 2: Load Testing Bertahap (Ramping VUs) & Thresholds SLA
Dalam pengujian beban nyata, traffic pengguna tidak datang secara instan. Kita perlu melakukan ramp-up (meningkatkan trafik secara bertahap), menjaga beban puncak (steady state), lalu ramp-down (menurunkan trafik).
Selain itu, kita tambahkan Thresholds agar k6 secara otomatis memberikan error code jika respon server terlalu lambat.
Buat file load-test-stages.js:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
// Skenario bertahap (Stages)
stages: [
{ duration: '30s', target: 20 }, // Naikkkan dari 0 ke 20 VUs dalam 30 detik
{ duration: '1m', target: 20 }, // Pertahankan 20 VUs selama 1 menit
{ duration: '20s', target: 0 }, // Turunkan beban ke 0 VUs dalam 20 detik
],
// Menentukan kriteria SLA (Ambang Batas)
thresholds: {
// 95% dari total request harus selesai di bawah 400ms
http_req_duration: ['p(95)<400'],
// Tingkat kegagalan request harus kurang dari 1%
http_req_failed: ['rate<0.01'],
// Tingkat keberhasilan check harus di atas 99%
checks: ['rate>0.99'],
},
};
export default function () {
const res = http.get('https://test-api.k6.io/public/crocodiles/1/');
check(res, {
'status is 200': (r) => r.status === 200,
'has crocodile id 1': (r) => r.json().id === 1,
});
sleep(1);
}
Jalankan skrip:
k6 run load-test-stages.js
Jika server gagal memenuhi thresholds (misal 95% request lebih lambat dari 400ms), k6 akan menandai metrik tersebut dengan warna merah dan menghasilkan exit status 99, yang akan membatalkan build pipeline jika dijalankan secara otomatis.
Contoh 3: Automated POST Request dengan Header JSON & Authenticated Payload
Pengujian otomasi sering kali membutuhkan simulasi pengiriman data (POST / PUT) dan autentikasi token JWT.
Berikut contoh skrip api-post-test.js untuk melakukan autentikasi login dan mengirim data payload:
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export const options = {
vus: 5,
duration: '15s',
};
const BASE_URL = 'https://test-api.k6.io';
export default function () {
// Menggunakan 'group' untuk mengelompokkan langkah-langkah pengujian
group('1. User Login & Token Retrieval', function () {
const loginPayload = JSON.stringify({
username: 'test_user',
password: 'test_password',
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
const loginRes = http.post(`${BASE_URL}/auth/token/login/`, loginPayload, params);
check(loginRes, {
'login status 200 or 400 (handled)': (r) => r.status === 200 || r.status === 400,
});
});
group('2. Fetch Public Data', function () {
const listRes = http.get(`${BASE_URL}/public/crocodiles/`);
check(listRes, {
'get list success': (r) => r.status === 200,
'response format array': (r) => Array.isArray(r.json()),
});
});
sleep(1);
}
Integrasi k6 Otomatis dalam CI/CD (GitHub Actions)
Salah satu kekuatan utama k6 adalah kemudahannya diintegrasikan ke dalam otomatisasi Continuous Integration (CI/CD). Kita dapat menjalankan performance regression test setiap kali ada Pull Request baru!
Berikut contoh file konfigurasi GitHub Actions (.github/workflows/k6-performance.yml):
name: k6 Automated Performance Test
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
k6_test:
name: Run k6 Load Test
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Run k6 Local Test
uses: grafana/[email protected]
with:
filename: load-test-stages.js
flags: --statsd-enable
Dengan alur ini, jika pengembang membuat perubahan kode yang menyebabkan latency API melonjak melebihi thresholds, GitHub Actions akan otomatis menggagalkan pull request tersebut sebelum masuk ke production!
Perbandingan: k6 vs JMeter vs Postman
| Fitur / Parameter | Grafana k6 | Apache JMeter | Postman Runner |
|---|---|---|---|
| Pendekatan Pengujian | Code-as-Test (JavaScript) | GUI / Drag-and-Drop (XML) | GUI Collection Runner |
| Konsumsi Memori / CPU | Sangat Rendah (Go Engine) | Tinggi (Java GUI Overhead) | Sedang |
| Dukungan CI/CD | Sangat Mudah & Native CLI | Membutuhkan Plugin / CLI Non-GUI | Menggunakan Newman CLI |
| Simulasi VUs Tinggi | Sangat Efisien (Ribuan VUs) | Membutuhkan Distributed Nodes | Kurang Cocok untuk High Load |
| Kemudahan Version Control (Git) | Sangat Mudah (.js biasa) |
Sulit (.jmx XML raksasa) |
Cukup Mudah (.json collection) |
Best Practices Menggunakan k6 Automation
- Gunakan
sleep()secara bijak: Tambahkan jeda waktu (think time) antar pengulangan untuk mensimulasikan perilaku manusia secara realistis. - Jangan Lakukan Load Testing dari Jaringan Lokal Terbatas: Pastikan pengujian skala besar dilakukan dari server cloud atau lingkungan yang mendekati produksi.
- Selalu Tentukan
thresholds: Tanpa thresholds, pengujian kamu hanya mengumpulkan angka tanpa ada status kelulusan otomatis (automated pass/fail gate). - Gunakan Parameter Lingkungan (
__ENV): Jangan lakukan hardcode URL server atau kredensial. Gunakan variabel lingkungan seperti__ENV.MY_URL.
Kesimpulan
k6 adalah automation tool modern yang sangat tangguh untuk load testing dan performance automation. Dengan berbasis JavaScript dan arsitektur Go yang efisien, k6 menjembatani kebutuhan developer, QA engineer, dan DevOps untuk menjaga kualitas performa aplikasi secara berkelanjutan.
Memahami cara menggunakan k6 akan meningkatkan standar kualitas software yang kamu kembangkan dan menjadi nilai tambah penting dalam karier rekayasa perangkat lunak modern.
Ingin mempelajari lebih banyak mengenai pengujian software, otomatisasi, dan dunia koding dari dasar? Simak artikel edukasi dan panduan menarik lainnya di Baricode Indonesia! 💡
Artikel Terkait
Mengenal Vibe Coding: Cara Baru Belajar dan Membangun Aplikasi dengan AI
Vibe coding mengubah cara kita membuat perangkat lunak. Cukup jelaskan ide dengan bahasa alami, lalu biarkan AI yang menulis kodenya sambil kamu mengarahkannya.
Panduan Vibe Coding untuk Pemula: Belajar Pemrograman Praktis dan Menyenangkan dengan AI
Ingin belajar koding tapi bingung mulai dari mana? Simak panduan vibe coding lengkap untuk pemula—mulai dari konsep dasar, persiapan alat, pola prompt efektif, hingga workflow membuat aplikasi pertama.
Panduan Lengkap Memahami HTML & CSS Untuk Pemula
Pahami fondasi utama pembuatan situs web. HTML memberikan struktur, sedangkan CSS memberikan tampilan visual yang indah.
Mengapa Pemula Perlu Mengenal Dunia Pemrograman?
Kombinasi antara semangat belajar dan kecakapan teknologi menciptakan potensi dampak sosial yang sangat besar.
Memulai Belajar Coding Dari Kondisi Paling Terbatas
Tidak perlu laptop mahal atau spek tinggi untuk mulai belajar koding. Ini langkah-langkah nyata yang bisa kamu ambil hari ini.
Laravel Adalah...: Pengertian, Fitur Utama, dan Alasan Menggunakannya
Laravel adalah framework PHP open-source terpopuler yang memudahkan pengembangan aplikasi web modern. Pelajari pengertian, arsitektur MVC, fitur unggulan, dan cara mulainya.
Flutter Adalah...: Pengertian, Keunggulan, Arsitektur Widget, dan Cara Mulai
Flutter adalah UI toolkit buatan Google untuk membangun aplikasi cross-platform (Android, iOS, Web, Desktop) dari satu codebase. Pelajari pengertian, keunggulan, bahasa Dart, hingga cara mulainya.
Dari Pemula Go Digital dengan Koding: Menghubungkan Semangat Belajar dengan Era Teknologi
Transformasi pembelajar otodidak di era digital bukan sekadar tren, melainkan langkah nyata menghubungkan kedisiplinan belajar dengan kecakapan teknologi modern melalui koding.
Algoritma dan Pemrograman: Panduan Dasar & Cara Mudah Memahaminya Bagi Pemula
Pelajari konsep dasar algoritma dan pemrograman secara mudah, intuitif, dan tanpa istilah rumit. Panduan lengkap bagi pemula yang baru memulai dunia koding.
NVM Artinya Apa? Ini Penjelasan Lengkap untuk Pemula
NVM artinya Node Version Manager, tool untuk mengelola banyak versi Node.js di satu komputer. Simak penjelasan lengkap, fungsi, dan cara pakainya.
Mengenal Perbedaan Statement dan Expression dalam Pemrograman
Secara umum, program komputer dapat dipahami sebagai kumpulan instruksi yang disusun untuk menyelesaikan tugas tertentu. Instruksi-instruksi tersebut dibentuk melalui kombinasi statement dan expression. Artikel ini akan mengupas perbedaan keduanya secara sistematis, lengkap dengan contoh penerapan pada beberapa bahasa pemrograman.
Hari Peluncuran Baricode Bimbingan: Langkah Awal dengan 4 Peserta yang Antusias
Pada hari peluncurannya, sebanyak 4 peserta pertama telah bergabung dan menunjukkan antusiasme untuk memulai proses belajar bersama Baricode Bimbingan. Meskipun jumlahnya masih kecil, momen ini menjadi fondasi penting bagi perjalanan yang lebih besar ke depannya.
Memperkenalkan Baricode Bimbingan: Pendampingan Belajar Koding Gratis via WhatsApp
Belajar coding otodidak tanpa harus sendirian. Baricode Bimbingan mendampingi remaja & pemuda desa lewat grup WhatsApp — gratis, tanpa kelas, tanpa meeting.
Siap melangkah lebih jauh?
Tidak perlu minder kalau kamu belajar dari kamar kecil atau dari kondisi paling terbatas sekalipun — kami pun memulai semuanya dari sana.