e4721053bd
- 新增异常处理体系(BaseException及其子类) - 优化密码、邮箱、用户名等基础类型 - 添加字典管理、登录日志、操作日志的E2E测试 - 完善API集成测试和安全测试 - 添加性能测试配置和脚本 - 优化OpenAPI配置和全局异常处理器
性能测试指南
概述
本目录包含Novalon管理系统的性能测试脚本,使用k6进行负载测试和压力测试。
前置条件
-
后端服务运行:
cd novalon-manage-api/manage-app mvn spring-boot:run -
数据库服务运行:
docker-compose up -d postgres -
k6安装:
# 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分钟
测试接口:健康检查、登录、用户列表
运行命令:
k6 run load_test.js
预期结果:
- 95%的请求响应时间<500ms
- 错误率<1%
- 系统稳定运行
2. 中等负载测试
目标:测试系统在中负载下的性能表现
虚拟用户数:50
持续时间:14分钟
测试接口:健康检查、登录、用户列表、角色列表、字典列表
运行命令:
k6 run load_test.js
预期结果:
- 95%的请求响应时间<500ms
- 错误率<1%
- 系统稳定运行
3. 高负载测试
目标:测试系统在高负载下的性能表现
虚拟用户数:100
持续时间:21分钟
测试接口:健康检查、登录、用户列表、角色列表、字典列表、系统配置、通知列表、操作日志
运行命令:
k6 run load_test.js
预期结果:
- 95%的请求响应时间<500ms
- 99%的请求响应时间<1000ms
- 错误率<1%
- 系统稳定运行
4. 压力测试
目标:测试系统在极限负载下的性能表现
虚拟用户数:100
持续时间:12分钟
测试接口:所有主要接口
运行命令:
k6 run load_test.js
预期结果:
- 识别系统性能瓶颈
- 验证系统稳定性
- 记录错误率
性能指标
关键指标
| 指标 | 描述 | 目标值 |
|---|---|---|
| HTTP请求响应时间 | 请求从发送到接收的总时间 | p95<500ms, p99<1000ms |
| HTTP请求失败率 | 失败请求占总请求的比例 | <1% |
| HTTP请求速率 | 每秒处理的请求数 | >100请求/秒 |
| 虚拟用户数 | 并发访问系统的用户数 | 根据测试场景 |
| 吞吐量 | 系统每秒处理的请求数 | 根据测试场景 |
性能阈值
thresholds: {
http_req_duration: ['p(95)<500'], // 95%的请求响应时间<500ms
http_req_failed: ['rate<0.01'], // 错误率<1%
}
测试结果分析
查看测试结果
k6会自动生成测试报告,包括:
- 控制台输出:实时显示测试进度和结果
- HTML报告:使用
--out参数生成HTML报告 - JSON报告:使用
--out参数生成JSON报告
生成HTML报告
k6 run --out html=report.html load_test.js
open report.html
生成JSON报告
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示例
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
最佳实践
- 在非生产环境运行:性能测试应该在测试环境或预发布环境运行
- 使用真实数据:使用与生产环境相似的数据量和数据分布
- 监控系统资源:在测试过程中监控CPU、内存、磁盘、网络使用情况
- 多次运行:多次运行测试以获得稳定的结果
- 记录基准:建立性能基准,便于比较和改进
- 分析瓶颈:根据测试结果分析性能瓶颈并优化
- 持续优化:将性能测试集成到CI/CD流水线,持续监控和优化
联系方式
如有问题或建议,请联系:
- 作者:张翔
- 角色:全栈质量保障与研发效能工程师
- 项目:Novalon管理系统
文档版本:1.0 最后更新:2026-03-24