69 lines
1.9 KiB
JavaScript
69 lines
1.9 KiB
JavaScript
// Simple load test for FRE-634: Launch Week Technical Readiness
|
|
// Tests concurrent user handling
|
|
|
|
import http from 'http';
|
|
|
|
const CONFIG = {
|
|
baseUrl: process.env.BASE_URL || 'http://localhost:3000',
|
|
concurrentUsers: 1000,
|
|
testDurationMs: 60000,
|
|
endpoints: [
|
|
'/',
|
|
'/api/projects',
|
|
'/api/characters',
|
|
'/api/revisions'
|
|
]
|
|
};
|
|
|
|
async function makeRequest(endpoint) {
|
|
return new Promise((resolve, reject) => {
|
|
const start = Date.now();
|
|
http.get(`${CONFIG.baseUrl}${endpoint}`, (res) => {
|
|
resolve({
|
|
endpoint,
|
|
statusCode: res.statusCode,
|
|
duration: Date.now() - start
|
|
});
|
|
}).on('error', (err) => {
|
|
reject({ endpoint, error: err.message });
|
|
});
|
|
});
|
|
}
|
|
|
|
async function loadTest() {
|
|
console.log(`Starting load test: ${CONFIG.concurrentUsers} users, ${CONFIG.testDurationMs}ms`);
|
|
console.log(`Target: ${CONFIG.baseUrl}`);
|
|
|
|
const results = [];
|
|
const startTime = Date.now();
|
|
|
|
while (Date.now() - startTime < CONFIG.testDurationMs) {
|
|
const promises = [];
|
|
for (let i = 0; i < CONFIG.concurrentUsers; i++) {
|
|
const endpoint = CONFIG.endpoints[i % CONFIG.endpoints.length];
|
|
promises.push(makeRequest(endpoint));
|
|
}
|
|
|
|
const batchResults = await Promise.all(promises);
|
|
results.push(...batchResults);
|
|
}
|
|
|
|
const successRate = results.filter(r => r.statusCode === 200).length / results.length * 100;
|
|
const avgDuration = results.reduce((a, b) => a + b.duration, 0) / results.length;
|
|
|
|
console.log(`\nResults:`);
|
|
console.log(`- Total requests: ${results.length}`);
|
|
console.log(`- Success rate: ${successRate.toFixed(2)}%`);
|
|
console.log(`- Average latency: ${avgDuration.toFixed(2)}ms`);
|
|
console.log(`- Max concurrent: ${CONFIG.concurrentUsers}`);
|
|
|
|
return {
|
|
totalRequests: results.length,
|
|
successRate,
|
|
avgLatency: avgDuration,
|
|
maxConcurrent: CONFIG.concurrentUsers
|
|
};
|
|
}
|
|
|
|
loadTest().catch(console.error);
|