69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
const axios = require('axios');
|
|
|
|
const API_BASE_URL = process.env.API_BASE_URL || 'https://api.frenocorp.com';
|
|
const CONCURRENCY = parseInt(process.env.LOAD_TEST_CONCURRENCY) || 10;
|
|
const DURATION = parseInt(process.env.LOAD_TEST_DURATION) || 60;
|
|
|
|
const endpoints = [
|
|
'/api/v1/auth/status',
|
|
'/api/v1/users/profile',
|
|
'/api/v1/activities/recent',
|
|
'/api/v1/plans/current'
|
|
];
|
|
|
|
async function runLoadTest() {
|
|
console.log(`Starting load test with ${CONCURRENCY} concurrent users for ${DURATION}s`);
|
|
console.log(`Target: ${API_BASE_URL}`);
|
|
|
|
const results = {
|
|
totalRequests: 0,
|
|
successful: 0,
|
|
failed: 0,
|
|
avgResponseTime: 0,
|
|
responseTimes: []
|
|
};
|
|
|
|
const startTime = Date.now();
|
|
const endTime = startTime + (DURATION * 1000);
|
|
|
|
while (Date.now() < endTime) {
|
|
const promises = endpoints.map(async (endpoint) => {
|
|
const requestStart = Date.now();
|
|
try {
|
|
const response = await axios.get(`${API_BASE_URL}${endpoint}`);
|
|
results.successful++;
|
|
results.responseTimes.push(Date.now() - requestStart);
|
|
} catch (error) {
|
|
results.failed++;
|
|
console.error(`Failed request to ${endpoint}:`, error.message);
|
|
}
|
|
results.totalRequests++;
|
|
});
|
|
|
|
await Promise.all(promises);
|
|
}
|
|
|
|
if (results.responseTimes.length > 0) {
|
|
results.avgResponseTime = results.responseTimes.reduce((a, b) => a + b, 0) / results.responseTimes.length;
|
|
}
|
|
|
|
console.log('\n=== Load Test Results ===');
|
|
console.log(`Total Requests: ${results.totalRequests}`);
|
|
console.log(`Successful: ${results.successful}`);
|
|
console.log(`Failed: ${results.failed}`);
|
|
console.log(`Success Rate: ${(results.successful / results.totalRequests * 100).toFixed(2)}%`);
|
|
console.log(`Average Response Time: ${results.avgResponseTime.toFixed(2)}ms`);
|
|
|
|
return results;
|
|
}
|
|
|
|
runLoadTest()
|
|
.then(() => {
|
|
console.log('\nLoad test completed successfully');
|
|
process.exit(0);
|
|
})
|
|
.catch((error) => {
|
|
console.error('Load test failed:', error);
|
|
process.exit(1);
|
|
});
|