You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
8.0 KiB
222 lines
8.0 KiB
import routeCache from '../utils/cache/RouteCache.js'
|
|
import performanceMonitor from '../middlewares/RoutePerformance/index.js'
|
|
import { logger } from '@/logger.js'
|
|
|
|
/**
|
|
* 路由缓存测试工具
|
|
* 用于验证缓存功能和性能监控
|
|
*/
|
|
class RouteCacheTest {
|
|
constructor() {
|
|
this.testResults = []
|
|
}
|
|
|
|
/**
|
|
* 运行所有测试
|
|
*/
|
|
async runAllTests() {
|
|
logger.info('[缓存测试] 开始运行路由缓存测试套件')
|
|
|
|
// 清除之前的测试数据
|
|
this.testResults = []
|
|
routeCache.clearAll()
|
|
|
|
try {
|
|
await this.testBasicCaching()
|
|
await this.testControllerCaching()
|
|
await this.testPerformanceMonitoring()
|
|
await this.testCacheConfiguration()
|
|
|
|
this.printTestResults()
|
|
} catch (error) {
|
|
logger.error('[缓存测试] 测试过程中发生错误:', error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试基本路由缓存功能
|
|
*/
|
|
async testBasicCaching() {
|
|
logger.info('[缓存测试] 测试基本路由缓存功能')
|
|
|
|
try {
|
|
// 测试缓存miss
|
|
const route1 = routeCache.getRouteMatch('GET', '/api/test')
|
|
this.assert(route1 === null, '初始状态应该缓存miss')
|
|
|
|
// 测试缓存set
|
|
const mockRoute = { path: '/api/test', params: {}, handler: () => {}, meta: {} }
|
|
routeCache.setRouteMatch('GET', '/api/test', mockRoute)
|
|
|
|
// 测试缓存hit
|
|
const route2 = routeCache.getRouteMatch('GET', '/api/test')
|
|
this.assert(route2 !== null, '设置缓存后应该命中')
|
|
this.assert(route2.path === '/api/test', '缓存内容应该正确')
|
|
|
|
this.addTestResult('基本路由缓存', true, '缓存设置和获取功能正常')
|
|
} catch (error) {
|
|
this.addTestResult('基本路由缓存', false, error.message)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试控制器缓存功能
|
|
*/
|
|
async testControllerCaching() {
|
|
logger.info('[缓存测试] 测试控制器缓存功能')
|
|
|
|
try {
|
|
// 测试控制器缓存miss
|
|
const controller1 = routeCache.getController('TestController')
|
|
this.assert(controller1 === null, '初始状态控制器缓存应该miss')
|
|
|
|
// 测试控制器缓存set
|
|
const mockController = { name: 'TestController', methods: ['test'] }
|
|
routeCache.setController('TestController', mockController)
|
|
|
|
// 测试控制器缓存hit
|
|
const controller2 = routeCache.getController('TestController')
|
|
this.assert(controller2 !== null, '设置控制器缓存后应该命中')
|
|
this.assert(controller2.name === 'TestController', '控制器缓存内容应该正确')
|
|
|
|
this.addTestResult('控制器缓存', true, '控制器缓存功能正常')
|
|
} catch (error) {
|
|
this.addTestResult('控制器缓存', false, error.message)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试性能监控功能
|
|
*/
|
|
async testPerformanceMonitoring() {
|
|
logger.info('[缓存测试] 测试性能监控功能')
|
|
|
|
try {
|
|
// 启用性能监控
|
|
performanceMonitor.enable()
|
|
|
|
// 模拟记录一些性能数据
|
|
performanceMonitor.recordPerformance('GET', '/api/test', 150, false)
|
|
performanceMonitor.recordPerformance('GET', '/api/test', 120, true)
|
|
performanceMonitor.recordPerformance('GET', '/api/test', 180, false)
|
|
|
|
// 获取性能报告
|
|
const report = performanceMonitor.getPerformanceReport()
|
|
this.assert(report.enabled === true, '性能监控应该启用')
|
|
this.assert(report.routes.length > 0, '应该有性能数据')
|
|
|
|
const testRoute = report.routes.find(r => r.path === '/api/test')
|
|
this.assert(testRoute !== undefined, '应该找到测试路由的性能数据')
|
|
this.assert(testRoute.requestCount === 3, '请求计数应该正确')
|
|
|
|
this.addTestResult('性能监控', true, '性能监控功能正常')
|
|
} catch (error) {
|
|
this.addTestResult('性能监控', false, error.message)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 测试缓存配置功能
|
|
*/
|
|
async testCacheConfiguration() {
|
|
logger.info('[缓存测试] 测试缓存配置功能')
|
|
|
|
try {
|
|
// 获取初始统计
|
|
const initialStats = routeCache.getStats()
|
|
this.assert(typeof initialStats.hitRate === 'string', '命中率应该是字符串格式')
|
|
this.assert(initialStats.caches !== undefined, '应该有缓存统计信息')
|
|
|
|
// 测试禁用缓存
|
|
routeCache.disable()
|
|
this.assert(routeCache.config.enabled === false, '缓存应该被禁用')
|
|
|
|
// 测试启用缓存
|
|
routeCache.enable()
|
|
this.assert(routeCache.config.enabled === true, '缓存应该被启用')
|
|
|
|
// 测试配置更新
|
|
const newConfig = { maxMatchCacheSize: 2000 }
|
|
routeCache.updateConfig(newConfig)
|
|
this.assert(routeCache.config.maxMatchCacheSize === 2000, '配置应该被更新')
|
|
|
|
this.addTestResult('缓存配置', true, '缓存配置功能正常')
|
|
} catch (error) {
|
|
this.addTestResult('缓存配置', false, error.message)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 断言辅助函数
|
|
*/
|
|
assert(condition, message) {
|
|
if (!condition) {
|
|
throw new Error(`断言失败: ${message}`)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 添加测试结果
|
|
*/
|
|
addTestResult(testName, passed, message) {
|
|
this.testResults.push({
|
|
name: testName,
|
|
passed,
|
|
message,
|
|
timestamp: new Date().toISOString()
|
|
})
|
|
|
|
const status = passed ? '✅ 通过' : '❌ 失败'
|
|
logger.info(`[缓存测试] ${testName}: ${status} - ${message}`)
|
|
}
|
|
|
|
/**
|
|
* 打印测试结果摘要
|
|
*/
|
|
printTestResults() {
|
|
const totalTests = this.testResults.length
|
|
const passedTests = this.testResults.filter(r => r.passed).length
|
|
const failedTests = totalTests - passedTests
|
|
|
|
logger.info('[缓存测试] =================== 测试结果摘要 ===================')
|
|
logger.info(`[缓存测试] 总计测试: ${totalTests}`)
|
|
logger.info(`[缓存测试] 通过: ${passedTests}`)
|
|
logger.info(`[缓存测试] 失败: ${failedTests}`)
|
|
logger.info(`[缓存测试] 成功率: ${((passedTests / totalTests) * 100).toFixed(2)}%`)
|
|
|
|
if (failedTests > 0) {
|
|
logger.warn('[缓存测试] 失败的测试:')
|
|
this.testResults.filter(r => !r.passed).forEach(result => {
|
|
logger.warn(`[缓存测试] - ${result.name}: ${result.message}`)
|
|
})
|
|
}
|
|
|
|
// 输出缓存统计
|
|
const stats = routeCache.getStats()
|
|
logger.info('[缓存测试] 最终缓存统计:', stats)
|
|
|
|
logger.info('[缓存测试] ================================================')
|
|
}
|
|
|
|
/**
|
|
* 获取测试结果
|
|
*/
|
|
getTestResults() {
|
|
return {
|
|
summary: {
|
|
total: this.testResults.length,
|
|
passed: this.testResults.filter(r => r.passed).length,
|
|
failed: this.testResults.filter(r => !r.passed).length,
|
|
successRate: this.testResults.length > 0 ?
|
|
((this.testResults.filter(r => r.passed).length / this.testResults.length) * 100).toFixed(2) + '%' : '0%'
|
|
},
|
|
details: this.testResults,
|
|
cacheStats: routeCache.getStats(),
|
|
performanceReport: performanceMonitor.getPerformanceReport()
|
|
}
|
|
}
|
|
}
|
|
|
|
// 导出测试类
|
|
export default RouteCacheTest
|
|
export { RouteCacheTest }
|