Cara stress test website dengan k6 perlu dimulakan secara terkawal, bukan terus menghantar ribuan permintaan ke server production. Ujian yang baik mempunyai objektif, had beban, threshold kejayaan dan pelan berhenti apabila ralat meningkat. Dengan pendekatan ini, anda boleh mengenal pasti had kapasiti website tanpa mencetuskan downtime yang tidak perlu.
Sebelum menjalankan skrip, baca panduan utama stress test web dan ketahanan website. Artikel ini memfokuskan penggunaan Grafana k6 untuk menguji halaman, API atau aliran ringkas pada sistem yang anda miliki atau telah mendapat kebenaran bertulis untuk diuji.
Jangan menguji laman pihak lain tanpa kebenaran. Beban tinggi boleh mengganggu operasi, menambah kos cloud, memenuhi log dan mencetuskan perlindungan WAF. Mulakan pada staging yang menyerupai production, kemudian gunakan ujian production berskala kecil hanya apabila pasukan teknikal bersedia memantau dan menghentikannya.
Persediaan Sebelum Cara Stress Test Website Dengan k6

Tentukan dahulu perkara yang mahu dibuktikan. Contohnya, halaman utama perlu kekal responsif pada 50 pengguna serentak, API carian perlu memberi respons dalam tempoh tertentu atau checkout perlu mengekalkan kadar ralat rendah semasa kempen. Objektif yang jelas membantu anda memilih senario, metrik dan tempoh ujian.
Sediakan baseline sebelum menambah beban. Catat penggunaan CPU, RAM, disk I/O, sambungan database, cache hit ratio, masa respons dan kadar ralat ketika trafik biasa. Tanpa baseline, sukar untuk menentukan sama ada perubahan selepas ujian benar-benar berpunca daripada beban atau masalah sedia ada.
- Dapatkan kebenaran dan tetapkan skop URL yang boleh diuji.
- Gunakan akaun, data dan kaedah pembayaran ujian.
- Maklumkan pasukan hosting, aplikasi dan database.
- Tetapkan had kos, tempoh dan bilangan virtual users.
- Sediakan dashboard pemantauan serta arahan menghentikan ujian.
- Pastikan backup dan pelan pemulihan telah diuji.
1. Pasang k6 dan Sahkan Pemasangan
Ikuti kaedah pemasangan untuk sistem operasi anda dalam dokumentasi rasmi Grafana k6. Selepas pemasangan, buka terminal dan semak versi dengan arahan berikut:
k6 version
Simpan semua skrip dalam repositori atau folder projek. Gunakan pemboleh ubah persekitaran untuk URL, token dan tetapan yang berubah antara staging dengan production. Jangan menulis kata laluan sebenar terus di dalam skrip yang mungkin dikongsi atau dimasukkan ke Git.
2. Tulis Skrip Ujian Asas
Mulakan dengan satu permintaan dan satu pemeriksaan status. Skrip asas berikut menguji halaman utama, memastikan respons HTTP 200 dan memberi masa rehat supaya corak trafik lebih realistik:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
vus: 1,
duration: '30s',
};
export default function () {
const res = http.get(__ENV.BASE_URL);
check(res, {
'status ialah 200': (r) => r.status === 200,
});
sleep(1);
}
Jalankan ujian smoke terlebih dahulu menggunakan satu virtual user. Tujuannya ialah mengesan URL salah, redirect tidak dijangka, sijil SSL bermasalah atau skrip yang menghasilkan data berulang. Jangan menaikkan beban selagi ujian kecil masih gagal.
3. Naikkan Virtual Users Secara Berperingkat
Cara stress test website yang selamat ialah menggunakan peringkat ramp-up, tempoh stabil dan ramp-down. Peningkatan berperingkat menunjukkan titik apabila masa respons mula merosot. Ia juga memberi peluang kepada pasukan untuk menghentikan ujian sebelum server kehabisan sumber.
export const options = {
stages: [
{ duration: '2m', target: 10 },
{ duration: '5m', target: 10 },
{ duration: '2m', target: 25 },
{ duration: '5m', target: 25 },
{ duration: '2m', target: 0 },
],
};
Virtual user bukan semestinya sama dengan seorang pelawat sebenar. Seorang pengguna mungkin menunggu, membaca atau melakukan beberapa permintaan dalam satu sesi. Pilih model berdasarkan data analytics, log aplikasi dan kadar transaksi sebenar, bukannya angka rawak yang kelihatan besar.
4. Gunakan Checks dan Thresholds
Checks mengesahkan keadaan pada setiap respons, manakala thresholds menentukan sama ada keseluruhan ujian lulus atau gagal. Contohnya, anda boleh menetapkan kadar ralat HTTP di bawah satu peratus dan 95 peratus permintaan selesai di bawah masa sasaran.
export const options = {
thresholds: {
http_req_failed: ['rate<0.01'],
http_req_duration: ['p(95)<800'],
checks: ['rate>0.99'],
},
};
Nilai contoh di atas bukan standard untuk semua website. Tetapkan sasaran mengikut fungsi, pengalaman pengguna dan service level objective anda. Rujuk penerangan thresholds dalam dokumentasi k6 sebelum menjadikannya syarat automasi CI/CD.
5. Uji Aliran Pengguna Yang Penting
Jangan hanya menguji halaman utama. Pilih aliran yang memberi kesan kepada operasi seperti carian, login, paparan produk, tambah ke cart dan checkout. Gunakan akaun serta produk ujian supaya transaksi palsu tidak bercampur dengan rekod pelanggan.
Untuk WordPress, baca juga cara melajukan website WordPress. Ujian beban membantu mengukur hasil, tetapi ia tidak menggantikan pengoptimuman imej, cache, plugin, query database dan konfigurasi server.
Jika aliran mempunyai side effect seperti menghantar e-mel, mencipta pesanan atau memotong stok, gunakan endpoint sandbox atau data yang boleh dibersihkan. Hadkan kadar permintaan kepada gateway pembayaran, API penghantaran dan servis pihak ketiga agar ujian tidak melanggar kuota atau menghasilkan caj.
6. Pantau Server Semasa Ujian
Output k6 sahaja tidak menunjukkan punca masalah. Pantau CPU, memori, load average, disk latency, network, proses PHP, queue, Redis, sambungan database dan slow query. Padankan masa lonjakan metrik server dengan perubahan virtual users dalam ujian.
| Gejala | Punca yang perlu disemak | Tindakan awal |
|---|---|---|
| Masa respons naik tetapi CPU rendah | Database, external API, lock atau disk I/O | Semak slow query, log dan dependency |
| CPU kekal hampir penuh | PHP worker, kod berat atau cache miss | Profil aplikasi dan semak cache |
| Ralat 502 atau 504 meningkat | Timeout, worker habis atau upstream gagal | Kurangkan beban dan semak log proxy |
| Ralat 429 muncul | Rate limit atau perlindungan WAF | Sahkan had dan whitelist sumber ujian secara terkawal |
| Database connection penuh | Pool terlalu kecil atau query lambat | Semak pool, index dan tempoh query |
Rujuk juga artikel kesan website perlahan terhadap hasil perniagaan untuk memahami mengapa masa respons perlu dilihat bersama kadar penukaran dan pengalaman pelanggan.
7. Tentukan Bila Ujian Perlu Dihentikan
Sebelum bermula, tetapkan stop condition. Hentikan ujian apabila kadar ralat melebihi had, database tidak stabil, queue meningkat tanpa pulih, latency melonjak berterusan atau pelanggan sebenar mula terjejas. Ujian bukan pertandingan untuk menjatuhkan server; tujuannya ialah mendapatkan data yang boleh digunakan.
Selepas ujian, biarkan sistem melalui tempoh pemulihan. Pastikan penggunaan CPU, sambungan database, queue dan error rate kembali ke baseline. Semak sama ada cron, backup atau proses background tertangguh akibat beban.
Kesilapan Biasa Semasa Stress Test
- Terus menjalankan beban tinggi tanpa smoke test.
- Menguji production tanpa kebenaran, pemantauan dan pelan berhenti.
- Menganggap virtual users sama tepat dengan jumlah pelawat.
- Tidak menggunakan checks sehingga respons ralat dianggap berjaya.
- Menggunakan satu halaman sahaja sedangkan bottleneck berada pada checkout atau database.
- Mengabaikan cache warm-up dan menjalankan perbandingan yang tidak setara.
- Tidak menyimpan versi skrip, konfigurasi server dan keputusan ujian.
Dokumentasikan tarikh, commit aplikasi, konfigurasi infrastruktur, dataset, skrip, threshold dan hasil. Apabila penambahbaikan dibuat, ulang cara stress test website dengan senario sama supaya perbandingan lebih adil.
Kesimpulan: Naikkan Beban Berdasarkan Data
Cara stress test website dengan k6 yang betul bermula daripada smoke test, diikuti ramp-up terkawal, checks, thresholds dan pemantauan server. Keputusan terbaik bukan sekadar jumlah pengguna tertinggi, tetapi titik kapasiti yang boleh diterangkan bersama punca serta tindakan pembaikan.
Kembali ke panduan stress test web untuk merancang ujian kapasiti secara menyeluruh. Jalankan hanya pada sistem yang dibenarkan, gunakan staging dahulu dan ulang ujian selepas setiap perubahan penting supaya peningkatan prestasi dapat dibuktikan.
Soalan Lazim
Apakah beza load test dan stress test?
Load test mengukur prestasi pada beban yang dijangka, manakala stress test menaikkan beban untuk melihat tingkah laku apabila menghampiri atau melebihi kapasiti. Kedua-duanya perlu mempunyai had keselamatan.
Bolehkah k6 digunakan untuk website WordPress?
Ya. Anda boleh menguji halaman awam, REST API dan aliran tertentu. Berhati-hati dengan login, cart, checkout, e-mel dan rekod yang mempunyai side effect.
Berapa virtual users patut digunakan?
Gunakan data trafik, kadar transaksi dan objektif kapasiti. Mulakan kecil, naikkan secara berperingkat dan hentikan apabila threshold atau stop condition dicapai.
Adakah selamat menjalankan ujian pada production?
Ia mempunyai risiko. Gunakan staging terlebih dahulu. Ujian production memerlukan kebenaran, waktu sesuai, pemantauan aktif, had rendah dan pelan rollback atau penghentian.
Metrik manakah paling penting?
Gabungkan percentile masa respons seperti p95, kadar ralat, checks, throughput dan metrik server. Satu metrik sahaja tidak cukup untuk menerangkan punca masalah.
Sharing is Caring


