Membaca Ringkasan k6 Baris demi Baris
checks.........................: 99.42% ✓ 17204 ✗ 100
data_received..................: 45 MB 1.5 MB/s
data_sent......................: 3.2 MB 107 kB/s
http_req_blocked...............: avg=1.2ms p(95)=0.8ms
http_req_connecting............: avg=0.5ms p(95)=0.2ms
http_req_duration..............: avg=245ms p(95)=487ms p(99)=1.2s
{ expected_response:true }...: avg=238ms p(95)=465ms
http_req_failed................: 0.58% ✓ 100 ✗ 17204
http_req_receiving.............: avg=12ms p(95)=45ms
http_req_sending...............: avg=0.1ms p(95)=0.2ms
http_req_tls_handshaking.......: avg=2.1ms p(95)=0ms
http_req_waiting...............: avg=233ms p(95)=460ms
http_reqs......................: 17304 576.8/s
iteration_duration.............: avg=1.24s p(95)=1.9s
iterations.....................: 17304 576.8/s
vus............................: 50 min=1 max=50
vus_max........................: 50| Metrik | Artinya | Kapan jadi masalah |
|---|---|---|
http_req_blocked | Menunggu slot koneksi TCP tersedia | Tinggi = connection pool habis / batchPerHost terlalu kecil |
http_req_connecting | Waktu TCP handshake | Tinggi = latensi jaringan atau server kehabisan socket |
http_req_tls_handshaking | Waktu negosiasi TLS | Tinggi = koneksi tidak di-reuse, atau cipher berat |
http_req_sending | Mengirim request | Tinggi = payload sangat besar / bandwidth upload terbatas |
http_req_waiting | TTFB — waktu berpikir server | Metrik utama untuk menilai backend |
http_req_receiving | Mengunduh isi respons | Tinggi = respons besar, perlu paginasi/kompresi |
http_req_duration | Total = sending + waiting + receiving | Ini yang dilihat pengguna |
iteration_duration | Durasi satu perjalanan pengguna (termasuk sleep) | Berguna untuk validasi think time |
dropped_iterations | Iterasi yang gagal dijadwalkan | > 0 berarti generator kewalahan — hasil tidak valid |
dropped_iterations muncul, hasil tes Anda TIDAK SAHMetrik ini berarti k6 tidak sanggup menjalankan iterasi sebanyak yang Anda minta — biasanya karena CPU generator penuh atau preAllocatedVUs kurang pada arrival-rate executor. Beban yang benar-benar sampai ke server lebih kecil dari yang Anda kira, sehingga kesimpulan kapasitas jadi salah.
Perbaikan: naikkan preAllocatedVUs/maxVUs, kurangi target laju, atau tambah mesin generator.
Empat Tipe Metrik Kustom
import { Counter, Gauge, Rate, Trend } from 'k6/metrics';
// COUNTER — angka yang hanya bertambah. Untuk menghitung kejadian.
const pesananDibuat = new Counter('pesanan_dibuat');
pesananDibuat.add(1);
// GAUGE — menyimpan nilai terakhir. Untuk nilai yang naik-turun.
const ukuranKeranjang = new Gauge('ukuran_keranjang');
ukuranKeranjang.add(res.json('items').length);
// RATE — persentase true dari total. Untuk rasio keberhasilan.
const stokTersedia = new Rate('stok_tersedia');
stokTersedia.add(res.json('stok') > 0);
// TREND — kumpulan nilai, menghasilkan avg/min/med/max/p(N).
// Argumen kedua true = tampilkan sebagai satuan waktu.
const durasiCheckout = new Trend('durasi_checkout', true);
durasiCheckout.add(Date.now() - mulai);Kapan Memakai Metrik Kustom
Metrik bawaan mengukur request. Metrik kustom mengukur bisnis. Manajemen tidak peduli pada http_req_duration — mereka peduli pada "berapa lama pelanggan menunggu sampai pesanan terkonfirmasi".
export default function () {
const mulai = Date.now();
const login = http.post(BASE + '/login', /* … */);
const cari = http.get(BASE + '/cari?q=sepatu');
const keranjang= http.post(BASE + '/keranjang', /* … */);
const bayar = http.post(BASE + '/bayar', /* … */);
// Satu angka yang mewakili keseluruhan perjalanan pengguna
durasiCheckout.add(Date.now() - mulai);
const berhasil = bayar.status === 201;
tingkatKonversi.add(berhasil);
if (berhasil) pesananDibuat.add(1);
}Tag pada Metrik Kustom
durasiCheckout.add(Date.now() - mulai, {
metode_bayar: 'kartu_kredit',
tier: user.tier,
});
// Lalu bisa dibuat threshold spesifik:
thresholds: {
'durasi_checkout{metode_bayar:kartu_kredit}': ['p(95)<3000'],
'durasi_checkout{metode_bayar:va}': ['p(95)<5000'],
}Tag dengan nilai tak terbatas (user ID, timestamp, UUID) akan menciptakan jutaan seri metrik dan membuat k6 maupun backend metrik Anda kehabisan memori. Gunakan tag hanya untuk kategori dengan jumlah nilai terbatas: tier, metode bayar, region, nama endpoint.