UNPKG

next-dev

Version:

Tentu, berikut adalah markdown yang telah diperbaiki:

129 lines (128 loc) 7.33 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const autocannon_1 = __importDefault(require("autocannon")); require("colors"); // Display a progress animation with text const displayProgress = (url, duration) => { let percent = 0; const interval = setInterval(() => { process.stdout.write(`\rTesting ${url}... ${percent}%`.white); percent += 1; if (percent > 100) { clearInterval(interval); } }, (duration * 10)); // Adjust interval duration to fit the test duration return interval; }; // Format and print the results in a readable way const printResults = (result, testOptions) => { console.log('\n\nLoad Test Results:'.white); console.log('-------------------'.white); console.log('Headers:'.white); console.log(` - URL: ${testOptions.url} [URL yang diuji]`.gray); console.log(` - Connections: ${testOptions.connections} [Jumlah koneksi simultan]`.gray); console.log(` - Duration: ${testOptions.duration} seconds [Durasi pengujian dalam detik]`.gray); console.log(` - Pipelining: ${testOptions.pipelining} [Jumlah permintaan yang diproses secara paralel]`.gray); console.log(` - Overall Rate: ${testOptions.overallRate} requests per second [Kecepatan permintaan total per detik]`.gray); console.log(` - Workers: ${testOptions.workers} [Jumlah thread worker yang digunakan]`.gray); console.log('-------------------'.white); console.log(`Requests per second: ${result.requests.average.toFixed(2)} [Rata-rata permintaan per detik]`.gray); console.log('Latency (ms):'.white); console.log(` - p50: ${result.latency.p50.toFixed(2)} [Latensi median (P50)]`.gray); console.log(` - p90: ${result.latency.p90.toFixed(2)} [Latensi 90 persentil (P90)]`.gray); console.log(` - p99: ${result.latency.p99.toFixed(2)} [Latensi 99 persentil (P99)]`.gray); console.log('Throughput (bytes/sec):'.white); console.log(` - Mean: ${result.throughput.mean.toFixed(2)} [Rata-rata throughput]`.gray); console.log(` - Standard Deviation: ${result.throughput.stddev.toFixed(2)} [Standar Deviasi throughput]`.gray); console.log('Errors:'.white, result.errors); // Evaluate the results and provide a conclusion const rps = result.requests.average; const latencyP99 = result.latency.p99; const throughput = result.throughput.mean; let conclusion = '\nKondisi situs web dapat dianggap:'.white; let score = 0; let reason = ''; let suggestion = ''; if (rps > 1000 && latencyP99 < 2000 && throughput > 1000000) { conclusion += '\n - Sangat baik. [Situs memiliki performa yang sangat baik]'.green; score = 90; reason = 'Sangat baik: RPS tinggi, latensi rendah, dan throughput tinggi menunjukkan situs yang sangat responsif dan mampu menangani banyak permintaan.'; suggestion = 'Lanjutkan pemantauan dan optimasi berkala untuk mempertahankan performa.'; } else if (rps > 500 && latencyP99 < 3000 && throughput > 500000) { conclusion += '\n - Bagus. [Situs memiliki performa yang baik]'.blue; score = 75; reason = 'Bagus: RPS cukup tinggi, latensi yang masih dapat diterima, dan throughput yang baik menunjukkan performa yang solid.'; suggestion = 'Pertimbangkan untuk meningkatkan caching dan optimasi query database.'; } else if (rps > 200 && latencyP99 < 4000 && throughput > 200000) { conclusion += '\n - Cukup baik. [Situs memiliki performa yang cukup baik]'.cyan; score = 60; reason = 'Cukup baik: RPS yang cukup, latensi yang mulai meningkat, dan throughput yang memadai menunjukkan performa yang cukup baik namun perlu perbaikan.'; suggestion = 'Optimalkan kode backend dan gunakan CDN untuk konten statis.'; } else if (rps > 100 && latencyP99 < 5000 && throughput > 100000) { conclusion += '\n - Kurang memuaskan. [Situs memiliki performa yang kurang memuaskan]'.yellow; score = 40; reason = 'Kurang memuaskan: RPS rendah, latensi tinggi, dan throughput yang rendah menunjukkan performa yang kurang baik dan perlu perbaikan serius.'; suggestion = 'Tingkatkan konfigurasi server dan optimasi database.'; } else { conclusion += '\n - Buruk. [Situs memiliki performa yang buruk]'.red; score = 20; reason = 'Buruk: RPS sangat rendah, latensi sangat tinggi, dan throughput yang sangat rendah menunjukkan performa yang sangat buruk dan membutuhkan perbaikan besar.'; suggestion = 'Lakukan audit menyeluruh terhadap infrastruktur dan kode aplikasi.'; } conclusion += `\n - Nilai: ${score}/100 [Nilai performa]`.white; conclusion += `\n - Alasan: ${reason}`.white; conclusion += `\n - Saran: ${suggestion}`.white; console.log(conclusion); }; // Main function to run the load test async function devTest(argv) { try { const testUrl = argv.url; const duration = argv.duration || 60; // Durasi pengujian 1 menit const progressInterval = displayProgress(testUrl, duration); const testOptions = { url: testUrl, connections: argv.connections || 200, // Minimum 200 koneksi simultan duration: duration, pipelining: argv.pipelining || 10, // Pipelining 10 permintaan overallRate: argv.rate || 1000, // Minimum 1000 permintaan per detik workers: argv.workers || 4, // Minimum 4 worker threads }; // Display the test description and objectives console.log('\nStarting Load Test'.white); console.log('-------------------'.white); console.log('Deskripsi:'.white); console.log(' Pengujian ini dilakukan untuk mengevaluasi performa dan kemampuan situs web dalam menangani beban tinggi.'.gray); console.log(' Dengan melakukan tes ini, kita dapat mengetahui tingkat responsivitas, kehandalan, dan kapasitas situs web.'.gray); console.log('Tujuan:'.white); console.log(' 1. Menentukan jumlah permintaan maksimum yang dapat ditangani per detik.'.gray); console.log(' 2. Mengukur latensi permintaan untuk memastikan waktu respon yang cepat.'.gray); console.log(' 3. Mengukur throughput data untuk mengetahui kapasitas transfer data yang optimal.'.gray); console.log('Jangkauan:'.white); console.log(' Hasil tes ini akan memberikan wawasan mengenai area yang memerlukan optimasi dan peningkatan performa.'.gray); console.log('-------------------'.white); (0, autocannon_1.default)(testOptions, (err, result) => { clearInterval(progressInterval); // Stop the progress animation if (err) { console.error('Error during load testing:'.red, err); return; } if (!result) { console.error('No load test results received'.red); return; } printResults(result, testOptions); // Print the results in a human-readable format }); } catch (error) { console.error('Error during load test:'.red, error); } } exports.default = devTest;