# 性能测试文档 ## 概述 性能测试用于评估系统在不同负载条件下的性能表现,包括页面加载速度、API响应时间、并发处理能力和资源使用情况。 ## 测试框架 性能测试基于 Playwright 框架,提供以下功能: - 页面加载性能测试 - API响应性能测试 - 并发和负载测试 - 内存使用监控 - 网络请求统计 ### 核心文件 - `performance.spec.ts`: 页面加载性能测试和性能指标收集工具 - `api-performance.spec.ts`: API响应性能测试 - `concurrency-performance.spec.ts`: 并发和负载测试 ## 运行性能测试 ### 前置条件 1. 确保后端服务已启动 2. 确保前端开发服务器已启动 3. 确保数据库已初始化测试数据 4. 确保系统资源充足(CPU、内存、网络) ### 运行所有性能测试 ```bash npx playwright test e2e/performance ``` ### 运行特定性能测试套件 ```bash # 运行页面加载性能测试 npx playwright test e2e/performance/performance.spec.ts # 运行API响应性能测试 npx playwright test e2e/performance/api-performance.spec.ts # 运行并发和负载测试 npx playwright test e2e/performance/concurrency-performance.spec.ts ``` ### 运行性能测试(UI模式) ```bash npx playwright test e2e/performance --ui ``` ### 调试性能测试 ```bash npx playwright test e2e/performance --debug ``` ## 性能指标 ### 性能指标类 `PerformanceMetrics` 类提供以下统计方法: - `getAverage(name)`: 获取平均值 - `getP95(name)`: 获取95百分位值 - `getP99(name)`: 获取99百分位值 - `getMax(name)`: 获取最大值 - `getMin(name)`: 获取最小值 ### 性能测试辅助类 `PerformanceTestHelper` 类提供以下辅助方法: - `measurePageLoad(page, url)`: 测量页面加载时间 - `measureApiCall(page, apiCall)`: 测量API调用时间 - `measureElementInteraction(page, selector, action)`: 测量元素交互时间 - `measurePageNavigation(page, fromUrl, toUrl)`: 测量页面导航时间 - `measureMemoryUsage(page)`: 测量内存使用情况 - `measureNetworkRequests(page)`: 测量网络请求数量 ## 性能测试用例 ### PT-001: 页面加载性能 | 用例ID | 用例名称 | 性能目标 | |---------|---------|---------| | PT-001 | 登录页面加载性能 | < 3000ms | | PT-002 | 仪表盘页面加载性能 | < 2000ms | | PT-003 | 用户管理页面加载性能 | < 2000ms | | PT-004 | 黄历页面加载性能 | < 2000ms | | PT-005 | 运势页面加载性能 | < 2000ms | ### PT-006: API响应性能 | 用例ID | 用例名称 | 性能目标 | |---------|---------|---------| | PT-006 | 用户登录API性能 | < 2000ms | | PT-007 | 获取用户列表API性能 | < 1500ms | | PT-008 | 创建用户API性能 | < 2000ms | | PT-009 | 黄历查询API性能 | < 1500ms | | PT-010 | 运势查询API性能 | < 2000ms | | PT-011 | 紫微斗数生成API性能 | < 3000ms | ### PT-012: 并发和负载测试 | 用例ID | 用例名称 | 性能目标 | |---------|---------|---------| | PT-012 | 并发登录测试 | 平均响应时间 < 5000ms | | PT-013 | 并发黄历查询测试 | 平均响应时间 < 3000ms | | PT-014 | 页面切换性能测试 | 页面切换 < 1000ms | | PT-015 | 表单提交性能测试 | 表单提交 < 1000ms | | PT-016 | 内存使用监控 | 内存增长 < 50MB | | PT-017 | 网络请求统计 | 平均请求次数 < 20 | ## 性能基准 ### 页面加载性能基准 - **优秀**: < 1000ms - **良好**: 1000ms - 2000ms - **可接受**: 2000ms - 3000ms - **需要优化**: > 3000ms ### API响应性能基准 - **优秀**: < 500ms - **良好**: 500ms - 1000ms - **可接受**: 1000ms - 2000ms - **需要优化**: > 2000ms ### 并发性能基准 - **优秀**: 平均响应时间 < 1000ms - **良好**: 平均响应时间 1000ms - 3000ms - **可接受**: 平均响应时间 3000ms - 5000ms - **需要优化**: 平均响应时间 > 5000ms ## 性能报告 性能测试执行后会生成以下报告: 1. **控制台输出**: 实时显示性能指标 2. **HTML报告**: `playwright-report/index.html` 3. **JSON报告**: `test-results/results.json` ### 性能报告示例 ``` === 性能测试报告 === 登录页面加载时间: 平均值: 1250.50ms P95: 1450.00ms P99: 1520.00ms 最大值: 1600.00ms 最小值: 1100.00ms 样本数: 10 仪表盘页面加载时间: 平均值: 890.30ms P95: 980.00ms P99: 1020.00ms 最大值: 1100.00ms 最小值: 750.00ms 样本数: 10 ==================== ``` ## 性能优化建议 ### 页面加载优化 1. **代码分割**: 使用动态导入减少初始加载时间 2. **资源压缩**: 启用Gzip/Brotli压缩 3. **CDN加速**: 使用CDN分发静态资源 4. **缓存策略**: 实现合理的缓存策略 5. **图片优化**: 使用WebP格式和懒加载 ### API响应优化 1. **数据库优化**: 添加索引、优化查询 2. **缓存机制**: 使用Redis缓存热点数据 3. **异步处理**: 使用消息队列处理耗时操作 4. **连接池**: 优化数据库连接池配置 5. **分页查询**: 避免返回大量数据 ### 并发处理优化 1. **负载均衡**: 使用负载均衡器分发请求 2. **限流措施**: 实现API限流保护 3. **连接复用**: 使用HTTP/2和连接复用 4. **资源隔离**: 隔离不同服务的资源 5. **自动扩容**: 实现自动扩容机制 ## 性能监控 ### 持续监控 建议在生产环境中实施以下监控: 1. **APM工具**: 使用New Relic、Datadog等APM工具 2. **日志分析**: 使用ELK Stack分析日志 3. **指标收集**: 使用Prometheus收集指标 4. **告警机制**: 设置性能告警阈值 5. **定期报告**: 生成定期性能报告 ### 性能指标 建议监控以下关键指标: 1. **响应时间**: P50、P95、P99响应时间 2. **吞吐量**: 每秒请求数(RPS) 3. **错误率**: HTTP错误率 4. **资源使用**: CPU、内存、磁盘使用率 5. **网络流量**: 入站和出站流量 ## 故障排查 ### 常见性能问题 1. **页面加载缓慢** - 检查网络带宽 - 检查服务器资源使用 - 检查资源加载顺序 - 使用浏览器开发者工具分析 2. **API响应缓慢** - 检查数据库查询性能 - 检查缓存命中率 - 检查网络延迟 - 检查并发连接数 3. **内存泄漏** - 检查内存使用趋势 - 检查对象引用 - 使用内存分析工具 - 优化数据结构 4. **并发性能差** - 检查线程池配置 - 检查锁竞争 - 检查资源争用 - 优化并发算法 ## 性能测试最佳实践 1. **测试环境**: 使用与生产环境相似的测试环境 2. **测试数据**: 使用真实大小的测试数据 3. **多次运行**: 每个测试运行多次取平均值 4. **基线对比**: 与历史基线对比性能变化 5. **持续监控**: 建立持续性能监控机制 ## 联系方式 如有问题,请联系测试团队或查看项目文档。