c50ccd258f
refactor(tests): 将e2e_tests迁移到tests_suite和api_integration_tests style: 为Java类添加文档注释 docs: 更新.gitignore和配置文件 test: 添加性能测试和Playwright测试脚本 chore: 清理旧测试文件和配置
246 lines
4.7 KiB
Markdown
246 lines
4.7 KiB
Markdown
# 性能测试指南
|
||
|
||
## 测试目的
|
||
|
||
评估网关层对系统性能的影响,验证多模块架构下的性能表现。
|
||
|
||
## 测试工具
|
||
|
||
使用 k6 进行性能测试,支持以下测试场景:
|
||
|
||
### 1. 基准测试 (Baseline Test)
|
||
- 持续负载:10个虚拟用户
|
||
- 持续时间:30秒
|
||
- 目的:建立性能基准
|
||
|
||
### 2. 压力测试 (Stress Test)
|
||
- 阶梯式负载:10 -> 50 -> 100 -> 50 -> 10
|
||
- 持续时间:5分钟
|
||
- 目的:测试系统在持续高负载下的表现
|
||
|
||
### 3. 尖峰测试 (Spike Test)
|
||
- 突发负载:10 -> 200 -> 10
|
||
- 持续时间:70秒
|
||
- 目的:测试系统应对突发流量的能力
|
||
|
||
## 运行测试
|
||
|
||
### 前置条件
|
||
|
||
1. 启动所有服务:
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
2. 等待服务就绪:
|
||
```bash
|
||
curl http://localhost:8080/actuator/health
|
||
```
|
||
|
||
### 运行基准测试
|
||
|
||
```bash
|
||
k6 run performance_tests/gateway_performance_test.js \
|
||
--env BASE_URL=http://localhost:8080 \
|
||
--env DURATION=30s \
|
||
--env VUS=10
|
||
```
|
||
|
||
### 运行压力测试
|
||
|
||
```bash
|
||
k6 run --config performance_tests/config.json \
|
||
performance_tests/gateway_performance_test.js \
|
||
--env BASE_URL=http://localhost:8080 \
|
||
--scenario stress_test
|
||
```
|
||
|
||
### 运行尖峰测试
|
||
|
||
```bash
|
||
k6 run --config performance_tests/config.json \
|
||
performance_tests/gateway_performance_test.js \
|
||
--env BASE_URL=http://localhost:8080 \
|
||
--scenario spike_test
|
||
```
|
||
|
||
## 性能指标
|
||
|
||
### 关键指标
|
||
|
||
1. **响应时间 (Response Time)**
|
||
- P50: 50%的请求响应时间
|
||
- P95: 95%的请求响应时间
|
||
- P99: 99%的请求响应时间
|
||
- 目标:P95 < 500ms
|
||
|
||
2. **吞吐量 (Throughput)**
|
||
- RPS (Requests Per Second): 每秒请求数
|
||
- 目标:根据业务需求设定
|
||
|
||
3. **错误率 (Error Rate)**
|
||
- HTTP 请求失败率
|
||
- 目标:< 5%
|
||
|
||
### 网关性能指标
|
||
|
||
1. **认证延迟**
|
||
- JWT 验证时间
|
||
- 目标:< 10ms
|
||
|
||
2. **授权延迟**
|
||
- RBAC 权限检查时间
|
||
- 目标:< 5ms
|
||
|
||
3. **路由延迟**
|
||
- 请求转发时间
|
||
- 目标:< 20ms
|
||
|
||
## 性能基准
|
||
|
||
### 无网关架构
|
||
- 平均响应时间:~200ms
|
||
- P95 响应时间:~350ms
|
||
- 吞吐量:~500 RPS
|
||
|
||
### 有网关架构(预期)
|
||
- 平均响应时间:~220ms (+10%)
|
||
- P95 响应时间:~400ms (+14%)
|
||
- 吞吐量:~450 RPS (-10%)
|
||
|
||
### 性能影响评估
|
||
|
||
网关层预期性能开销:
|
||
- 响应时间增加:10-15%
|
||
- 吞吐量下降:10-15%
|
||
- CPU 使用增加:5-10%
|
||
|
||
## 性能优化建议
|
||
|
||
### 网关层优化
|
||
|
||
1. **缓存优化**
|
||
- JWT Token 缓存
|
||
- 权限规则缓存
|
||
- 路由规则缓存
|
||
|
||
2. **连接池优化**
|
||
- HTTP 客户端连接池
|
||
- 数据库连接池
|
||
|
||
3. **异步处理**
|
||
- 非阻塞 I/O
|
||
- 响应式编程
|
||
|
||
### 应用层优化
|
||
|
||
1. **数据库优化**
|
||
- 索引优化
|
||
- 查询优化
|
||
- 连接池配置
|
||
|
||
2. **缓存策略**
|
||
- Redis 缓存
|
||
- 本地缓存
|
||
|
||
3. **代码优化**
|
||
- 减少序列化开销
|
||
- 优化算法复杂度
|
||
|
||
## 监控指标
|
||
|
||
使用 Spring Boot Actuator 进行轻量级监控:
|
||
|
||
### 健康检查
|
||
```bash
|
||
curl http://localhost:8080/actuator/health
|
||
```
|
||
|
||
### 应用信息
|
||
```bash
|
||
curl http://localhost:8080/actuator/info
|
||
```
|
||
|
||
### 性能指标
|
||
```bash
|
||
curl http://localhost:8080/actuator/metrics
|
||
```
|
||
|
||
### 系统指标
|
||
- JVM 内存使用
|
||
- GC 频率和时间
|
||
- 线程池使用情况
|
||
- HTTP 请求统计
|
||
|
||
## 结果分析
|
||
|
||
### 性能报告模板
|
||
|
||
```
|
||
测试场景:[基准测试/压力测试/尖峰测试]
|
||
测试时间:[YYYY-MM-DD HH:MM:SS]
|
||
测试时长:[XX秒]
|
||
虚拟用户数:[XX]
|
||
|
||
性能指标:
|
||
- 平均响应时间:[XXms]
|
||
- P95 响应时间:[XXms]
|
||
- P99 响应时间:[XXms]
|
||
- 吞吐量:[XX RPS]
|
||
- 错误率:[XX%]
|
||
|
||
网关性能:
|
||
- 认证延迟:[XXms]
|
||
- 授权延迟:[XXms]
|
||
- 路由延迟:[XXms]
|
||
|
||
系统资源:
|
||
- CPU 使用率:[XX%]
|
||
- 内存使用率:[XX%]
|
||
|
||
结论:
|
||
[性能是否满足要求,是否需要优化]
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
### 常见问题
|
||
|
||
1. **连接拒绝**
|
||
- 检查服务是否启动
|
||
- 检查端口是否正确
|
||
- 检查防火墙设置
|
||
|
||
2. **高错误率**
|
||
- 检查日志文件
|
||
- 检查数据库连接
|
||
- 检查内存使用情况
|
||
|
||
3. **响应时间过长**
|
||
- 检查慢查询日志
|
||
- 检查网络延迟
|
||
- 检查 GC 情况
|
||
|
||
## 持续集成
|
||
|
||
将性能测试集成到 Woodpecker CI:
|
||
|
||
```yaml
|
||
performance_test:
|
||
image: python:3.13
|
||
commands:
|
||
- cd api_integration_tests
|
||
- pip install -r requirements.txt
|
||
- pytest tests/test_real_e2e.py -v --no-cov
|
||
depends_on:
|
||
- deploy-staging
|
||
when:
|
||
- event: push
|
||
branch: develop
|
||
```
|
||
|
||
## 参考资料
|
||
|
||
- [k6 官方文档](https://k6.io/docs/)
|
||
- [Spring Boot Actuator 文档](https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html)
|
||
- [Spring WebFlux 性能优化](https://docs.spring.io/spring-framework/reference/web/webflux/reactive-spring.html) |