修改文件结构,统一文档格式
This commit is contained in:
233
test/tests/performance-monitor-test.js
Normal file
233
test/tests/performance-monitor-test.js
Normal file
@@ -0,0 +1,233 @@
|
||||
/**
|
||||
* 性能监控系统测试脚本
|
||||
* @file performance-monitor-test.js
|
||||
* @description 测试性能监控系统的基本功能
|
||||
*/
|
||||
const { performanceMonitor, events: perfEvents } = require('../backend/utils/performance-monitor');
|
||||
const logger = require('../backend/utils/logger');
|
||||
|
||||
// 配置测试日志
|
||||
function log(message) {
|
||||
console.log(`[${new Date().toISOString()}] ${message}`);
|
||||
}
|
||||
|
||||
// 测试事件监听
|
||||
function setupEventListeners() {
|
||||
perfEvents.on('monitoringStarted', (data) => {
|
||||
log(`✅ 监控启动事件触发,间隔: ${data.interval}ms`);
|
||||
});
|
||||
|
||||
perfEvents.on('monitoringStopped', () => {
|
||||
log('✅ 监控停止事件触发');
|
||||
});
|
||||
|
||||
perfEvents.on('highCpuUsage', (data) => {
|
||||
log(`⚠️ 高CPU使用率事件触发: ${data.usage}% (阈值: ${data.threshold}%)`);
|
||||
});
|
||||
|
||||
perfEvents.on('highMemoryUsage', (data) => {
|
||||
log(`⚠️ 高内存使用率事件触发: ${data.usage}% (阈值: ${data.threshold}%)`);
|
||||
});
|
||||
|
||||
perfEvents.on('highDiskUsage', (data) => {
|
||||
log(`⚠️ 高磁盘使用率事件触发: ${data.usage}% (阈值: ${data.threshold}%)`);
|
||||
});
|
||||
|
||||
log('事件监听器已设置');
|
||||
}
|
||||
|
||||
// 测试系统资源监控
|
||||
async function testSystemMonitoring() {
|
||||
log('\n--- 测试系统资源监控 ---');
|
||||
|
||||
try {
|
||||
// 获取系统指标
|
||||
const metrics = performanceMonitor.getSystemMetrics();
|
||||
log('系统指标:');
|
||||
log(`CPU使用率: ${metrics.current.cpu.usage}%`);
|
||||
log(`内存使用率: ${metrics.current.memory.usage}%`);
|
||||
log(`磁盘使用率: ${metrics.current.disk.usage}%`);
|
||||
|
||||
// 测试收集系统指标
|
||||
const collected = performanceMonitor.collectSystemMetrics();
|
||||
log('收集的系统指标:');
|
||||
log(`CPU使用率: ${collected.cpuUsage.usage}%`);
|
||||
log(`内存使用率: ${collected.memoryUsage.usage}%`);
|
||||
log(`磁盘使用率: ${collected.diskUsage.usage}%`);
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
log(`❌ 系统资源监控测试失败: ${error.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 测试警报阈值设置
|
||||
async function testAlertThresholds() {
|
||||
log('\n--- 测试警报阈值设置 ---');
|
||||
|
||||
try {
|
||||
// 获取当前阈值
|
||||
const originalThresholds = performanceMonitor.getAlertThresholds();
|
||||
log('当前警报阈值:');
|
||||
log(`CPU使用率阈值: ${originalThresholds.system.cpuUsage}%`);
|
||||
log(`内存使用率阈值: ${originalThresholds.system.memoryUsage}%`);
|
||||
log(`API响应时间阈值: ${originalThresholds.api.responseTime}ms`);
|
||||
|
||||
// 设置新阈值
|
||||
const newThresholds = {
|
||||
system: {
|
||||
cpuUsage: 50,
|
||||
memoryUsage: 60
|
||||
},
|
||||
api: {
|
||||
responseTime: 200
|
||||
}
|
||||
};
|
||||
|
||||
const result = performanceMonitor.setAlertThresholds(newThresholds);
|
||||
log('设置新阈值结果:');
|
||||
log(`成功: ${result.success}`);
|
||||
log(`CPU使用率新阈值: ${result.thresholds.system.cpuUsage}%`);
|
||||
log(`内存使用率新阈值: ${result.thresholds.system.memoryUsage}%`);
|
||||
log(`API响应时间新阈值: ${result.thresholds.api.responseTime}ms`);
|
||||
|
||||
// 恢复原始阈值
|
||||
performanceMonitor.setAlertThresholds(originalThresholds);
|
||||
log('已恢复原始阈值');
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
log(`❌ 警报阈值设置测试失败: ${error.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 测试监控启动和停止
|
||||
async function testMonitoringControl() {
|
||||
log('\n--- 测试监控启动和停止 ---');
|
||||
|
||||
try {
|
||||
// 获取当前状态
|
||||
const originalStatus = performanceMonitor.getMonitoringStatus();
|
||||
log(`当前监控状态: ${originalStatus.isMonitoring ? '运行中' : '已停止'}`);
|
||||
|
||||
// 如果已经在运行,先停止
|
||||
if (originalStatus.isMonitoring) {
|
||||
const stopResult = performanceMonitor.stopMonitoring();
|
||||
log(`停止监控结果: ${stopResult.success ? '成功' : '失败'} - ${stopResult.message}`);
|
||||
}
|
||||
|
||||
// 启动监控(使用短间隔进行测试)
|
||||
const startResult = performanceMonitor.startMonitoring(5000); // 5秒间隔
|
||||
log(`启动监控结果: ${startResult.success ? '成功' : '失败'} - ${startResult.message}`);
|
||||
|
||||
// 等待10秒,让监控运行一段时间
|
||||
log('等待10秒...');
|
||||
await new Promise(resolve => setTimeout(resolve, 10000));
|
||||
|
||||
// 获取更新后的状态
|
||||
const updatedStatus = performanceMonitor.getMonitoringStatus();
|
||||
log(`更新后的监控状态: ${updatedStatus.isMonitoring ? '运行中' : '已停止'}`);
|
||||
log(`监控间隔: ${updatedStatus.interval}ms`);
|
||||
|
||||
// 停止监控
|
||||
const finalStopResult = performanceMonitor.stopMonitoring();
|
||||
log(`停止监控结果: ${finalStopResult.success ? '成功' : '失败'} - ${finalStopResult.message}`);
|
||||
|
||||
// 恢复原始状态
|
||||
if (originalStatus.isMonitoring) {
|
||||
performanceMonitor.startMonitoring(originalStatus.interval);
|
||||
log(`已恢复原始监控状态,间隔: ${originalStatus.interval}ms`);
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
log(`❌ 监控启动和停止测试失败: ${error.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 测试API统计
|
||||
async function testApiStats() {
|
||||
log('\n--- 测试API统计 ---');
|
||||
|
||||
try {
|
||||
// 模拟API请求
|
||||
const req1 = { method: 'GET', path: '/api/test', headers: {}, ip: '127.0.0.1' };
|
||||
const res1 = { statusCode: 200, end: function() {}, on: function(event, callback) { callback(); } };
|
||||
|
||||
const req2 = { method: 'POST', path: '/api/users', headers: {}, ip: '127.0.0.1' };
|
||||
const res2 = { statusCode: 201, end: function() {}, on: function(event, callback) { callback(); } };
|
||||
|
||||
const req3 = { method: 'GET', path: '/api/error', headers: {}, ip: '127.0.0.1' };
|
||||
const res3 = { statusCode: 500, end: function() {}, on: function(event, callback) { callback(); } };
|
||||
|
||||
// 重置API统计
|
||||
performanceMonitor.resetApiStats();
|
||||
log('API统计已重置');
|
||||
|
||||
// 记录API请求
|
||||
log('记录API请求...');
|
||||
performanceMonitor.recordApiRequest(req1, res1, Date.now() - 50); // 50ms响应时间
|
||||
performanceMonitor.recordApiRequest(req2, res2, Date.now() - 100); // 100ms响应时间
|
||||
performanceMonitor.recordApiRequest(req3, res3, Date.now() - 600); // 600ms响应时间(慢请求)
|
||||
|
||||
// 获取API统计
|
||||
const apiStats = performanceMonitor.getApiStats();
|
||||
log('API统计:');
|
||||
log(`总请求数: ${apiStats.totalRequests}`);
|
||||
log(`总错误数: ${apiStats.totalErrors}`);
|
||||
log(`错误率: ${apiStats.errorRate}%`);
|
||||
log(`平均响应时间: ${apiStats.avgResponseTime}ms`);
|
||||
log(`每分钟请求数: ${apiStats.requestsPerMinute}`);
|
||||
|
||||
log('端点统计:');
|
||||
apiStats.endpoints.forEach(endpoint => {
|
||||
log(`- ${endpoint.endpoint}: ${endpoint.count}请求, ${endpoint.avgDuration}ms平均响应时间, ${endpoint.errorRate}%错误率`);
|
||||
});
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
log(`❌ API统计测试失败: ${error.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 运行所有测试
|
||||
async function runAllTests() {
|
||||
log('开始性能监控系统测试...');
|
||||
|
||||
// 设置事件监听器
|
||||
setupEventListeners();
|
||||
|
||||
// 运行测试
|
||||
const results = {
|
||||
systemMonitoring: await testSystemMonitoring(),
|
||||
alertThresholds: await testAlertThresholds(),
|
||||
monitoringControl: await testMonitoringControl(),
|
||||
apiStats: await testApiStats()
|
||||
};
|
||||
|
||||
// 输出测试结果摘要
|
||||
log('\n--- 测试结果摘要 ---');
|
||||
Object.entries(results).forEach(([test, passed]) => {
|
||||
log(`${test}: ${passed ? '✅ 通过' : '❌ 失败'}`);
|
||||
});
|
||||
|
||||
const allPassed = Object.values(results).every(result => result === true);
|
||||
log(`\n总体结果: ${allPassed ? '✅ 所有测试通过' : '❌ 部分测试失败'}`);
|
||||
|
||||
return allPassed;
|
||||
}
|
||||
|
||||
// 执行测试
|
||||
runAllTests()
|
||||
.then(passed => {
|
||||
log(`测试完成,${passed ? '全部通过' : '部分失败'}`);
|
||||
process.exit(passed ? 0 : 1);
|
||||
})
|
||||
.catch(error => {
|
||||
log(`测试执行错误: ${error.message}`);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user