Load Testing API Dengan K6
Load Testing API adalah proses mensimulasikan traffic pengguna ke endpoint API untuk mengukur kinerja dan kemampuannya menangani permintaan dalam jumlah besar. Tujuan Load Testing API adalah untuk menemukan masalah kinerja, seperti waktu respons yang lama, tingkat kesalahan yang tinggi, atau masalah lain yang dapat memengaruhi pengalaman pengguna.
Untuk memuat pengujian API, Anda harus mengirim permintaan dalam jumlah besar ke endpoint API menggunakan alat atau kerangka kerja yang dirancang khusus untuk tujuan ini. Permintaan ini biasanya dirancang untuk mensimulasikan berbagai perilaku pengguna, termasuk permintaan bersamaan, berbagai jenis permintaan, dan payload size yang berbeda. Kinerja dan skalabilitas endpoint ditentukan dengan menganalisis respons dari API dalam kondisi load yang berbeda.
Stabilitas dan reliabilitas aplikasi web yang mengandalkan API dapat dipastikan dengan Load Testing. Dengan melakukan Load Testing, insinyur software dan administrator sistem dapat mengidentifikasi potensi masalah dan mengoptimalkan API untuk menangani volume traffic yang tinggi. Ini memastikan bahwa konsumen API mendapatkan pengalaman pengguna yang konsisten dan responsif.
Berbagai Jenis Load Testing API
Ada beberapa jenis pengujian yang dapat digunakan untuk mengevaluasi kinerja endpoint API:
- Pengujian Performa: Kita dapat menggunakan jenis pengujian ini untuk mengukur waktu respons API dalam kondisi load yang berbeda. Tujuannya adalah untuk mengidentifikasi seberapa cepat API dapat memproses dan merespons permintaan.
- Stress Testing: Kami menggunakan stress testing untuk menguji kemampuan API untuk menangani permintaan dalam jumlah besar. Tujuannya adalah untuk mengidentifikasi kapasitas maksimum dari API dan bagaimana perilakunya ketika mencapai batasnya.
- Pengujian Spike: Kami menggunakan pengujian Surge untuk mengevaluasi kemampuan API dalam menangani Surge traffic yang tiba-tiba. Selain itu, ini dapat membantu mengidentifikasi bagaimana API berperilaku ketika Surge traffic yang tidak diharapkan terjadi.
- Pengujian Ketahanan: Kami menggunakan pengujian ketahanan untuk mengevaluasi bagaimana kinerja API di bawah load berkelanjutan dalam jangka waktu yang lama. Tujuannya adalah untuk mengidentifikasi setiap penurunan kinerja atau kebocoran memori yang mungkin terjadi dari waktu ke waktu.
- Pengujian Volume: Kami menggunakan pengujian volume untuk mengevaluasi kinerja API di bawah volume permintaan tertentu. Tujuannya adalah menentukan jumlah permintaan maksimum yang dapat ditangani API sambil mempertahankan tingkat kinerja yang dapat diterima.
Dengan menggabungkan jenis pengujian ini, teknisi software dan administrator sistem dapat mengidentifikasi potensi masalah kinerja dengan API mereka dan mengoptimalkannya untuk menangani volume traffic tinggi, memastikan pengguna menerima pengalaman yang konsisten dan responsif.
K6
Untuk tutorial ini, kita akan menggunakan K6. Ini adalah alat open-source yang kuat yang dirancang untuk memuat aplikasi web dan API. Orang-orang di Grafana Labs menulisnya di Go, dan memiliki bahasa skrip berbasis JavaScript modern, yang membuatnya mudah untuk menulis dan mengelola skrip pengujian. Selain itu, ia menawarkan fitur yang kaya, termasuk dukungan untuk HTTP/1.1, HTTP/2, WebSocket, dan protokol gRPC dan integrasi dengan alat DevOps populer seperti Grafana, InfluxDB, dan Prometheus.
Interface K6 yang mudah digunakan, kemampuan skrip yang kuat, dan integrasi dengan berbagai alat menjadikannya pilihan ideal bagi insinyur software dan administrator sistem yang ingin menguji load API mereka secara efisien dan efektif.
Instal Package
npm install k6
Berikut adalah kode JavaScript yang menggunakan K6 untuk menguji load endpoint API Lelucon, dan saya menggabungkan lima jenis Load Testing API berbeda yang tercantum di atas:
import http from 'k6/http';
import { check, group, sleep } from 'k6';
export let options = {
stages: [
{ duration: '1m', target: 100 }, // simulate ramp-up of traffic over 1 minute
{ duration: '2m', target: 100 }, // stay at 100 virtual users for 2 minutes
{ duration: '1m', target: 0 }, // ramp-down to 0 virtual users
],
};
export default function () {
group('Performance Test', function () {
let res = http.get('https://official-joke-api.appspot.com/random_joke');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
});
group('Stress Test', function () {
for (let i = 0; i < 100; i++) {
let res = http.get('https://official-joke-api.appspot.com/random_joke');
check(res, { 'status is 200': (r) => r.status === 200 });
}
sleep(1);
});
group('Spike Test', function () {
let res = http.get('https://official-joke-api.appspot.com/random_joke');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(5);
for (let i = 0; i < 50; i++) {
http.get('https://official-joke-api.appspot.com/random_joke');
}
sleep(5);
});
group('Endurance Test', function () {
for (let i = 0; i < 100; i++) {
let res = http.get('https://official-joke-api.appspot.com/random_joke');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}
});
group('Volume Test', function () {
for (let i = 0; i < 1000; i++) {
let res = http.get('https://official-joke-api.appspot.com/random_joke');
check(res, { 'status is 200': (r) => r.status === 200 });
}
sleep(1);
});
}
Setelah Anda menginstal Package K6 NPM, Anda dapat menyimpan kode JavaScript ke sebuah file, misalnya, jokes_api_load_test.js,
lalu jalankan perintah berikut untuk menjalankan pengujian:
k6 run --vus 100 --duration 4m jokes_api_load_test.js
Analisis Hasil Load Testing API
Tes load mencakup lima jenis tes yang berbeda:
- Tes Kinerja: Tes ini lulus dengan kode status 200.
- Stress Test: Tes ini gagal dengan kode status 200. Tes dijalankan dengan 300 pengguna virtual berhasil menyelesaikan permintaan, tetapi 9700 pengguna virtual gagal.
- Uji Surge: Uji ini gagal dengan kode status 200. Uji dijalankan dengan 100 pengguna virtual, tetapi tidak satu pun dari mereka berhasil menyelesaikan permintaan.
- Tes Daya Tahan: Tes ini gagal dengan kode status 200. Tes dijalankan dengan 100 pengguna virtual, dengan 100 menyelesaikan permintaan dan 9900 gagal.
- Tes Volume: Tes ini gagal dengan kode status 200. Tes dilakukan dengan 347 pengguna virtual, dengan 40898 gagal dan hanya 347 yang berhasil.
Mengenai metrik lainnya, tes mengirim data 5,0 MB dan menerima data 22 MB dengan kecepatan rata-rata 80 kB/dtk. Durasi pengujian rata-rata 43,13 detik, dengan durasi minimal 1,55 detik dan durasi maksimal 2 menit 5 detik. Pengujian memiliki durasi permintaan HTTP rata-rata 236,7 md, dengan waktu respons yang diharapkan 288,05 md. Pengujian tersebut juga memiliki persentase permintaan HTTP yang gagal tinggi, dengan 98,72% gagal.
K6 mengeksekusi pengujian dengan 100 pengguna virtual, dan jumlah maksimum pengguna virtual juga 100. Oleh karena itu, metrik vus_max mewakili jumlah maksimum pengguna virtual selama pengujian.
Takeaway Key
Inilah cara kami dapat menggunakan hasil Load Testing API untuk meningkatkan performa dan stabilitas endpoint API:
- Tingkatkan Penanganan Kesalahan: Persentase permintaan HTTP yang gagal yang tinggi menunjukkan bahwa mungkin ada masalah dengan penanganan kesalahan di endpoint API. Identifikasi dan penanganan masalah ini dapat membantu meningkatkan stabilitas endpoint.
- Optimalkan Performa: Rata-rata durasi permintaan HTTP 236,7 md relatif Lama. Hal ini dapat terjadi karena permintaan database yang tidak efisien atau komunikasi jaringan yang Lama. Untuk meningkatkan kinerja, meninjau dan mengoptimalkan kode, kueri, dan sumber daya lain yang terlibat dalam permintaan mungkin berguna.
- Infrastruktur Skala: Tes juga menunjukkan bahwa endpoint mungkin memerlukan bantuan untuk menangani volume traffic yang besar. Menskalakan infrastruktur, seperti dengan menambah jumlah server atau menggunakan penyeimbang load, dapat membantu memastikan bahwa endpoint dapat menangani volume traffic yang lebih tinggi tanpa meLama atau mogok.
- Perbaiki Pesan Kesalahan: Pengujian yang gagal dapat membantu mengidentifikasi kesalahan umum, yang dapat kami gunakan untuk meningkatkan pesan kesalahan untuk endpoint API. Pesan kesalahan yang lebih baik dapat membantu perekayasa software untuk mengidentifikasi dan menyelesaikan masalah saat muncul dengan cepat.
- Meningkatkan Cakupan Pengujian: Berbagai jenis pengujian yang digunakan dalam uji load dapat membantu mengidentifikasi area endpoint API yang memerlukan pengujian lebih lanjut. Selain itu, meningkatkan cakupan pengujian dapat membantu memastikan bahwa endpoint berfungsi dengan benar dan berkinerja baik di berbagai jenis traffic dan skenario pengguna.
Sebagai kesimpulan, Load Testing API sangat penting untuk memastikan performa, stabilitas, dan skalabilitas API. Dengan mensimulasikan traffic pengguna ke endpoint API menggunakan alat seperti K6, teknisi software dan administrator sistem dapat mengidentifikasi potensi masalah dan mengoptimalkan API untuk menangani volume traffic yang tinggi, memastikan pengguna menerima pengalaman yang konsisten dan responsif.
Teruskan iterasi, teruskan pengiriman, dan terus bantu pengguna akhir.