# 性能测试指南 ## 概述 本目录包含Novalon管理系统的性能测试脚本,使用k6进行负载测试和压力测试。 ## 前置条件 1. **后端服务运行**: ```bash cd novalon-manage-api/manage-app mvn spring-boot:run ``` 2. **数据库服务运行**: ```bash docker-compose up -d postgres ``` 3. **k6安装**: ```bash # macOS brew install k6 # Linux curl https://github.com/grafana/k6/releases/download/v0.50.0/k6-v0.50.0-linux-amd64.tar.gz -L | tar xvz sudo mv k6-v0.50.0-linux-amd64/k6 /usr/local/bin/ ``` ## 测试场景 ### 1. 基础性能测试 **目标**:测试系统在低负载下的性能表现 **虚拟用户数**:10 **持续时间**:7分钟 **测试接口**:健康检查、登录、用户列表 **运行命令**: ```bash k6 run load_test.js ``` **预期结果**: - 95%的请求响应时间<500ms - 错误率<1% - 系统稳定运行 ### 2. 中等负载测试 **目标**:测试系统在中负载下的性能表现 **虚拟用户数**:50 **持续时间**:14分钟 **测试接口**:健康检查、登录、用户列表、角色列表、字典列表 **运行命令**: ```bash k6 run load_test.js ``` **预期结果**: - 95%的请求响应时间<500ms - 错误率<1% - 系统稳定运行 ### 3. 高负载测试 **目标**:测试系统在高负载下的性能表现 **虚拟用户数**:100 **持续时间**:21分钟 **测试接口**:健康检查、登录、用户列表、角色列表、字典列表、系统配置、通知列表、操作日志 **运行命令**: ```bash k6 run load_test.js ``` **预期结果**: - 95%的请求响应时间<500ms - 99%的请求响应时间<1000ms - 错误率<1% - 系统稳定运行 ### 4. 压力测试 **目标**:测试系统在极限负载下的性能表现 **虚拟用户数**:100 **持续时间**:12分钟 **测试接口**:所有主要接口 **运行命令**: ```bash k6 run load_test.js ``` **预期结果**: - 识别系统性能瓶颈 - 验证系统稳定性 - 记录错误率 ## 性能指标 ### 关键指标 | 指标 | 描述 | 目标值 | |------|------|--------| | HTTP请求响应时间 | 请求从发送到接收的总时间 | p95<500ms, p99<1000ms | | HTTP请求失败率 | 失败请求占总请求的比例 | <1% | | HTTP请求速率 | 每秒处理的请求数 | >100请求/秒 | | 虚拟用户数 | 并发访问系统的用户数 | 根据测试场景 | | 吞吐量 | 系统每秒处理的请求数 | 根据测试场景 | ### 性能阈值 ```javascript thresholds: { http_req_duration: ['p(95)<500'], // 95%的请求响应时间<500ms http_req_failed: ['rate<0.01'], // 错误率<1% } ``` ## 测试结果分析 ### 查看测试结果 k6会自动生成测试报告,包括: 1. **控制台输出**:实时显示测试进度和结果 2. **HTML报告**:使用`--out`参数生成HTML报告 3. **JSON报告**:使用`--out`参数生成JSON报告 ### 生成HTML报告 ```bash k6 run --out html=report.html load_test.js open report.html ``` ### 生成JSON报告 ```bash k6 run --out json=report.json load_test.js ``` ## 性能优化建议 ### 1. 数据库优化 - 添加适当的索引 - 优化慢查询 - 使用连接池 - 考虑读写分离 ### 2. 缓存优化 - 使用Redis缓存热点数据 - 实现查询结果缓存 - 使用CDN缓存静态资源 ### 3. 应用优化 - 优化算法复杂度 - 减少不必要的数据库查询 - 使用异步处理 - 实现请求合并 ### 4. 基础设施优化 - 使用负载均衡 - 水平扩展应用实例 - 优化网络配置 - 使用更快的硬件 ## 故障排查 ### 问题1:连接超时 **症状**:大量请求失败,错误率高 **解决方案**: - 检查后端服务是否正常运行 - 检查数据库连接是否正常 - 增加连接池大小 - 优化数据库查询 ### 问题2:响应时间过长 **症状**:95%或99%的请求响应时间超过阈值 **解决方案**: - 分析慢查询日志 - 添加数据库索引 - 优化应用逻辑 - 增加缓存 ### 问题3:内存溢出 **症状**:应用崩溃或性能急剧下降 **解决方案**: - 增加JVM堆内存 - 分析内存泄漏 - 优化对象创建 - 使用对象池 ## CI/CD集成 ### GitHub Actions示例 ```yaml name: Performance Tests on: schedule: - cron: '0 2 * * *' # 每天凌晨2点运行 workflow_dispatch: jobs: performance-test: runs-on: ubuntu-latest services: postgres: image: postgres:15 env: POSTGRES_DB: manage_system POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - 55432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v3 - name: Set up Java uses: actions/setup-java@v3 with: java-version: '21' distribution: 'temurin' - name: Build backend run: | cd novalon-manage-api mvn clean package -DskipTests - name: Start backend run: | cd novalon-manage-api/manage-app java -jar target/manage-app-1.0.0.jar & sleep 30 - name: Install k6 run: | curl https://github.com/grafana/k6/releases/download/v0.50.0/k6-v0.50.0-linux-amd64.tar.gz -L | tar xvz sudo mv k6-v0.50.0-linux-amd64/k6 /usr/local/bin/ - name: Run performance tests run: | cd performance_tests k6 run --out json=performance-results.json load_test.js - name: Upload performance results uses: actions/upload-artifact@v3 with: name: performance-results path: performance_tests/performance-results.json ``` ## 最佳实践 1. **在非生产环境运行**:性能测试应该在测试环境或预发布环境运行 2. **使用真实数据**:使用与生产环境相似的数据量和数据分布 3. **监控系统资源**:在测试过程中监控CPU、内存、磁盘、网络使用情况 4. **多次运行**:多次运行测试以获得稳定的结果 5. **记录基准**:建立性能基准,便于比较和改进 6. **分析瓶颈**:根据测试结果分析性能瓶颈并优化 7. **持续优化**:将性能测试集成到CI/CD流水线,持续监控和优化 ## 联系方式 如有问题或建议,请联系: - **作者**:张翔 - **角色**:全栈质量保障与研发效能工程师 - **项目**:Novalon管理系统 --- **文档版本**:1.0 **最后更新**:2026-03-24