Load testing dan stress testing merupakan dua metode pengujian performa yang digunakan untuk mengevaluasi kemampuan aplikasi dalam menghadapi beban kerja. Keduanya sama-sama mengukur performa sistem, tetapi memiliki tujuan yang berbeda. Load testing berfokus pada kemampuan aplikasi menangani beban pengguna yang diperkirakan terjadi, sedangkan stress testing menguji batas kemampuan sistem ketika beban melampaui kapasitas normalnya.
Dalam pengembangan aplikasi modern, pengujian ini penting untuk memastikan bahwa website, API, database, dan layanan backend tetap dapat beroperasi sesuai kebutuhan ketika jumlah pengguna meningkat. Kegagalan memahami kapasitas sistem dapat menyebabkan peningkatan waktu respons, kegagalan transaksi, hingga gangguan layanan.
Dokumentasi Microsoft Learn mengenai strategi pengujian performa serta dokumentasi Grafana k6 membedakan pengujian berdasarkan pola beban dan tujuan pengukurannya. Pendekatan tersebut menunjukkan bahwa keberhasilan pengujian tidak cukup dinilai dari kemampuan sistem merespons permintaan, tetapi juga dari stabilitas, batas kapasitas, dan perilakunya ketika menghadapi kondisi ekstrem.
Apa perbedaan load testing dan stress testing dalam pengujian performa aplikasi?
Load testing menguji apakah sistem mampu memenuhi target performa pada beban kerja yang diperkirakan, sedangkan stress testing menguji bagaimana sistem berperilaku ketika beban mendekati atau melampaui kapasitasnya.
Pada load testing, tim pengembang menentukan skenario berdasarkan pola penggunaan aplikasi, seperti jumlah pengguna bersamaan (concurrent users), jumlah permintaan per detik (requests per second), dan durasi penggunaan. Tujuannya adalah mengetahui apakah sistem mampu mempertahankan waktu respons, tingkat keberhasilan permintaan, dan stabilitas layanan sesuai kriteria yang ditetapkan.
Sebagai contoh, aplikasi e-commerce diperkirakan menerima 500 pengguna bersamaan pada periode promosi biasa. Pengujian dilakukan untuk mengetahui apakah pengguna tetap dapat membuka katalog, menambahkan produk ke keranjang, dan menyelesaikan pembayaran dengan performa yang dapat diterima.
Sebaliknya, stress testing meningkatkan beban melampaui skenario normal untuk mengidentifikasi keterbatasan sistem. Pengujian dapat mengungkap kapan waktu respons mulai memburuk, permintaan mengalami kegagalan, antrean menumpuk, atau database tidak lagi mampu memproses transaksi secara stabil.
Perbedaan keduanya dapat dirangkum sebagai berikut:

Keduanya bukan metode yang saling menggantikan. Load testing membantu memvalidasi kesiapan aplikasi untuk operasional, sementara stress testing membantu tim memahami risiko ketika permintaan melebihi kapasitas yang direncanakan.
Bagaimana cara menguji normal expected load, increasing load, dan breaking point pada aplikasi?
Pengujian yang efektif dimulai dengan menetapkan beban yang realistis, kemudian meningkatkan intensitasnya secara terukur sesuai tujuan pengujian.
Normal expected load merupakan beban yang diperkirakan terjadi dalam kondisi penggunaan sehari-hari. Angkanya sebaiknya didasarkan pada data produksi, analitik penggunaan, proyeksi pertumbuhan, atau kebutuhan bisnis yang terdokumentasi. Jika data aktual belum tersedia, tim dapat menggunakan asumsi yang dinyatakan secara eksplisit dan memvalidasinya setelah aplikasi mulai digunakan.
Pada tahap ini, penguji mencatat metrik dasar, antara lain:
- Waktu respons persentil ke-95 (p95 latency) dan persentil ke-99 (p99 latency).
- Throughput atau jumlah permintaan yang berhasil diproses per satuan waktu.
- Error rate, termasuk respons HTTP 5xx dan kegagalan transaksi.
- Penggunaan CPU, memori, koneksi database, dan kapasitas antrean.
Tahap berikutnya adalah increasing load, yaitu menaikkan beban secara bertahap untuk mengamati perubahan performa. Misalnya, pengujian dimulai pada 100 pengguna bersamaan, dilanjutkan menjadi 250, 500, 750, hingga 1.000 pengguna, dengan durasi yang memadai pada setiap tingkat.
Angka tersebut hanyalah ilustrasi skenario, bukan standar universal. Profil beban harus disesuaikan dengan arsitektur, pola trafik, dan target layanan aplikasi yang diuji.
Selama beban meningkat, penguji perlu memperhatikan apakah waktu respons bertambah secara proporsional atau justru melonjak tajam. Peningkatan latensi yang disertai pertumbuhan error rate, CPU yang mendekati batas, atau antrean yang terus menumpuk dapat menjadi indikasi bahwa salah satu komponen mulai mengalami saturasi.
Breaking point adalah titik ketika sistem tidak lagi memenuhi kriteria performa atau keandalan yang telah ditetapkan. Titik ini tidak selalu berarti server mati sepenuhnya. Aplikasi dapat dianggap melewati batas operasional ketika waktu respons melampaui target, tingkat kegagalan meningkat secara signifikan, atau transaksi penting tidak lagi dapat diselesaikan dengan andal.
Karena itu, breaking point sebaiknya ditentukan berdasarkan kriteria terukur, bukan sekadar jumlah pengguna maksimum. Sistem yang masih merespons permintaan tetapi gagal memproses pembayaran secara konsisten, misalnya, belum tentu dapat dianggap sehat.
Dokumentasi Grafana k6 tentang API load testing menjelaskan bahwa tujuan pengujian menentukan profil beban yang digunakan. Sementara itu, panduan Microsoft Learn mengenai strategi pengujian performa membedakan pengujian beban normal dari pengujian untuk menemukan batas sistem. Kedua pendekatan tersebut mendukung praktik pengujian yang berbasis skenario dan metrik yang jelas.
Bagaimana cara mengevaluasi system behavior dan recovery setelah stress testing?
Mengetahui batas kapasitas saja belum cukup. Pengujian performa juga harus menjelaskan bagaimana aplikasi merespons tekanan, melindungi transaksi penting, dan kembali beroperasi normal setelah beban dikurangi.
System behavior mencakup respons aplikasi ketika sebagian sumber dayanya mulai kehabisan kapasitas. Perilaku yang perlu diamati antara lain peningkatan latensi, penolakan permintaan, kegagalan koneksi database, pertumbuhan antrean, serta efek kegagalan satu layanan terhadap layanan lain.
Sistem yang dirancang dengan baik tidak harus selalu berhasil memproses seluruh permintaan pada kondisi ekstrem. Namun, sistem seharusnya memiliki mekanisme untuk membatasi dampak kegagalan. Contohnya mencakup rate limiting, timeout, circuit breaker, pembatasan antrean, dan graceful degradation—menurunkan sebagian fungsi yang tidak kritis agar fungsi utama tetap tersedia.
Dalam aplikasi yang memproses pembayaran, misalnya, lonjakan trafik seharusnya tidak menyebabkan transaksi tercatat secara ganda atau status pembayaran menjadi tidak konsisten. Pengujian perlu memeriksa idempotensi transaksi, penanganan timeout, serta rekonsiliasi status apabila layanan pembayaran atau database mengalami gangguan.
Aspek berikutnya adalah recovery, yaitu kemampuan sistem kembali ke kondisi operasional yang dapat diterima setelah beban ekstrem diturunkan. Penguji dapat mengurangi beban secara bertahap, kemudian mengamati apakah waktu respons, error rate, penggunaan sumber daya, dan panjang antrean kembali menuju baseline.
Pemulihan tidak selalu terjadi secara otomatis. Antrean yang menumpuk, koneksi yang belum dilepas, proses latar belakang yang tertunda, atau mekanisme autoscaling yang lambat dapat membuat performa tetap buruk meskipun jumlah permintaan sudah menurun.
Karena itu, pengujian sebaiknya mencatat waktu pemulihan, jumlah permintaan yang gagal, keberhasilan pemrosesan antrean tertunda, dan kebutuhan intervensi manual. Tim juga perlu memeriksa apakah aplikasi kembali stabil tanpa kehilangan data atau menghasilkan efek samping yang tidak diinginkan.
Panduan Google SRE mengenai pengurangan kegagalan berantai menekankan pentingnya memahami titik kegagalan serta perilaku komponen saat kembali ke beban normal. Prinsip ini memperluas tujuan stress testing: bukan sekadar membuktikan bahwa sistem dapat gagal, melainkan memastikan dampak kegagalan dapat dibatasi dan pemulihan dapat diprediksi.
Dalam praktiknya, pengujian load dan stress perlu dilakukan di lingkungan yang terkontrol, dengan pemantauan menyeluruh terhadap aplikasi, infrastruktur, dan dependensi eksternal. Pengujian pada sistem produksi harus melalui perencanaan risiko dan otorisasi yang memadai agar tidak mengganggu pengguna.
Kesimpulan: Load testing menjawab apakah aplikasi mampu menangani beban yang diperkirakan, sedangkan stress testing menjawab bagaimana aplikasi bereaksi ketika kapasitasnya terlampaui. Dengan menguji normal expected load, increasing load, breaking point, system behavior, dan recovery, tim dapat memperoleh gambaran yang lebih utuh mengenai kapasitas dan keandalan sistem sebelum maupun setelah aplikasi beroperasi.
Baca Juga : Apa Itu Load Testing dan Mengapa Website Membutuhkannya?
Baca Juga : Di Balik Fertechtive: Mengapa Saya Membangun Website Ini
