Load testing adalah skill wajib bagi setiap engineer yang membangun sistem skalabel. Saya menggunakan k6.io untuk semua project di Badr Interactive karena ringan, bisa di-code, dan mudah diintegrasikan ke CI/CD.
Kenapa k6?
- Scriptable — Test scenario ditulis dalam JavaScript
- CLI-native — Bisa dijalankan di terminal dan CI/CD pipeline
- Low resource — Bisa generate ribuan VUs dari satu mesin
- Integrasi CI/CD — Bisa digabung dengan Jenkins, GitLab CI, GitHub Actions
Contoh Script Dasar
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 }, // Ramp-up
{ duration: '5m', target: 100 }, // Stable
{ duration: '2m', target: 0 }, // Ramp-down
],
thresholds: {
http_req_duration: ['p(95)<2000'], // 95% request < 2s
http_req_failed: ['rate<0.01'], // Error rate < 1%
},
};
export default function () {
const res = http.get('https://api.example.com/users');
check(res, {
'status is 200': (r) => r.status === 200,
});
sleep(1);
}
Interpretasi Hasil
Saya selalu fokus pada metrik ini:
- p95 response time — Waktu response untuk 95% request
- Error rate — Persentase request yang gagal
- Throughput — Request per detik yang bisa ditangani
Integration ke CI/CD
Di Jenkins, saya integrasikan k6 dengan threshold check — jika threshold gagal, pipeline otomatis reject build. Ini prevents performance regression sebelum sampai ke production.
Load testing rutin menghemat biaya infrastructure dan mencegah downtime di production.