Files
novalon-manage-system/performance_tests/README.md
T
张翔 e4721053bd feat: 完善系统配置审计通知功能并优化异常处理
- 新增异常处理体系(BaseException及其子类)
- 优化密码、邮箱、用户名等基础类型
- 添加字典管理、登录日志、操作日志的E2E测试
- 完善API集成测试和安全测试
- 添加性能测试配置和脚本
- 优化OpenAPI配置和全局异常处理器
2026-03-24 14:05:35 +08:00

298 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 性能测试指南
## 概述
本目录包含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