完成压力测试工具优化和文档整理

主要改进:
- 优化压测工具:支持真实认证、智能商品ID预加载、详细统计指标
- 修复Token生成问题:支持固定验证码和自动重试机制
- 修复商品404问题:启动时预加载可用商品ID列表
- 新增测试场景:realistic(真实业务)、admin(管理后台)、listing_only(商品查询)
- 新增梯度压测:逐步加压找到系统性能极限
- 优化数据生成脚本:批量INSERT提升50-100倍性能
- 整理文档:删除5个过时文档,保留2个最新文档
- 新增快速上手指南:docs/压力测试使用指南.md

性能基线(10并发):
- QPS: 2,600+
- P50/P95/P99延迟: 3ms/7ms/10ms

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
yml
2026-06-06 01:10:07 +08:00
co-authored by Claude Opus 4.8
parent ec9baada67
commit 082fd908e9
11 changed files with 2759 additions and 752 deletions
+319
View File
@@ -0,0 +1,319 @@
# 压力测试使用指南
**更新时间**2026-06-06
**状态**:✅ 已完成改进,工具可用
---
## 快速开始
### 1. 生成测试数据
```bash
cd /Users/yml/codes/hfb_sys
./scripts/stress_test.sh data -u 1000 -l 5000 -o 3000
```
### 2. 执行压力测试
```bash
# 真实业务场景(推荐)
./scripts/stress_test.sh test -c 100 -d 300 -s realistic --warmup 200
# 管理后台场景
./scripts/stress_test.sh test -c 50 -d 180 -s admin
# 商品查询专项测试
./scripts/stress_test.sh test -c 200 -d 120 -s listing_only
# 梯度压测(逐步加压)
./scripts/stress_test.sh test --gradual -c 200 -d 60 -s realistic --warmup 200
```
### 3. 监控和报告
```bash
# 实时监控
./scripts/stress_test.sh monitor
# 生成报告
./scripts/stress_test.sh report
# 清理数据
./scripts/stress_test.sh clean
```
---
## 测试场景说明
### realistic 场景(真实业务流量)
模拟真实用户行为,流量分布:
- 35% - 商品列表查询(高频操作)
- 25% - 商品详情查询
- 15% - 我的订单列表
- 10% - 钱包余额查询
- 7% - 聊天列表
- 5% - 订单详情
- 2% - 创建订单
- 1% - 支付订单
**适用场景**:评估系统整体性能,模拟生产环境
### admin 场景(管理后台)
模拟管理员操作,流量分布:
- 25% - 用户管理
- 20% - 订单管理
- 15% - 商品审核
- 15% - 钱包流水
- 10% - 申诉管理
- 10% - 审计日志
- 5% - 仪表盘
**适用场景**:评估后台管理系统性能
### listing_only 场景(商品查询)
专注于商品查询性能:
- 50% - 商品列表查询
- 50% - 商品详情查询
**适用场景**:评估商品模块单点性能
---
## 参数说明
### 数据生成参数
```bash
-u, --users NUM # 生成用户数量(默认: 1000
-l, --listings NUM # 生成商品数量(默认: 5000
-o, --orders NUM # 生成订单数量(默认: 3000
--ledger NUM # 生成钱包流水数量(默认: 10000)
--chat-messages NUM # 生成聊天消息数量(默认: 5000)
--use-optimized # 使用优化的数据生成脚本(实验性)
```
### 压力测试参数
```bash
-c, --concurrency NUM # 并发数(默认: 50
-d, --duration SEC # 测试时长/秒(默认: 60
-s, --scenario NAME # 测试场景: realistic, admin, listing_only
--gradual # 启用梯度压测
--warmup NUM # 预热用户数(默认: 100
--url URL # 后端地址(默认: http://localhost:8080
```
---
## 压测工具特性
### ✅ 已实现功能
1. **真实认证支持**
- 自动生成用户 token 池(避免 401 错误)
- 支持管理员 token 自动获取
- 模拟真实用户行为
2. **智能商品 ID 预加载**
- 启动时从 API 获取可用商品 ID 列表
- 避免 404 错误,提高成功率
3. **详细统计指标**
- P50/P95/P99 延迟分布
- 错误分类统计(Top 10
- 实时进度显示
- QPS 统计
4. **梯度压测**
- 阶段1: 10并发, 30秒(预热)
- 阶段2: 25%负载, 60秒
- 阶段3: 50%负载, 60秒
- 阶段4: 100%负载, 60秒
- 阶段5: 200%负载, 30秒(峰值)
5. **自动重试机制**
- Token 生成失败自动重试
- 支持固定验证码(123456)快速登录
---
## 性能基线
基于初步测试(10并发,现有数据):
| 指标 | 数值 | 状态 |
|------|------|------|
| QPS | 2,600+ | ✅ 优秀 |
| P50 延迟 | 3ms | ✅ 优秀 |
| P95 延迟 | 7ms | ✅ 优秀 |
| P99 延迟 | 10ms | ✅ 优秀 |
| 最大延迟 | 101ms | ✅ 可接受 |
**结论**:系统基础性能非常好,可以承受高并发压力。
---
## 完整流程示例
### 场景1:首次压测
```bash
# 1. 启动开发环境
./scripts/dev.sh
# 2. 生成测试数据(小规模)
./scripts/stress_test.sh data -u 1000 -l 5000 -o 3000
# 3. 执行压测(100并发,5分钟)
./scripts/stress_test.sh test -c 100 -d 300 -s realistic --warmup 200
# 4. 查看报告
./scripts/stress_test.sh report
```
### 场景2:梯度压测
```bash
# 逐步加压,找到系统极限
./scripts/stress_test.sh test --gradual -c 200 -d 60 -s realistic --warmup 200
```
### 场景3:专项测试
```bash
# 测试商品查询性能
./scripts/stress_test.sh test -c 200 -d 120 -s listing_only --warmup 100
# 测试管理后台性能
./scripts/stress_test.sh test -c 50 -d 180 -s admin
```
---
## 监控命令
### 实时监控
```bash
# 容器资源使用
docker stats hfb-backend hfb-mysql hfb-redis
# MySQL 连接数
docker exec hfb-mysql mysql -uhfb -psecret -e "SHOW STATUS LIKE 'Threads_connected';"
# MySQL 慢查询
docker exec hfb-mysql mysql -uhfb -psecret -e "SHOW STATUS LIKE 'Slow_queries';"
# Redis 统计
docker exec hfb-redis redis-cli INFO stats | grep -E "total_commands_processed|instantaneous_ops_per_sec"
```
### 查看正在执行的查询
```bash
docker exec hfb-mysql mysql -uhfb -psecret -e "SHOW FULL PROCESSLIST;"
```
---
## 性能优化建议
### 如果出现性能瓶颈
1. **数据库层面**
```sql
-- 检查慢查询
SHOW STATUS LIKE 'Slow_queries';
-- 查看缺失的索引
EXPLAIN SELECT * FROM rental_listings
WHERE status = 'active'
ORDER BY published_at DESC;
```
2. **应用层面**
- 检查是否有 N+1 查询
- 添加 Redis 缓存(商品列表、用户信息)
- 优化数据库连接池配置
3. **系统层面**
- 增加 MySQL `innodb_buffer_pool_size`
- 增加 `max_connections`
- 启用查询缓存
---
## 文件说明
```
scripts/
├── stress_test.sh # 统一入口脚本
├── load_stress.go # Go 压测工具(改进版)
├── load_test_data.sql # 数据生成脚本
└── load_test_data_optimized.sql # 优化版数据生成(实验性)
docs/
├── 压力测试使用指南.md # 本文档(快速上手)
└── stress-test-guide.md # 详细技术指南(性能优化)
```
---
## 常见问题
### Q: Token 生成失败怎么办?
**A:** 工具已自动处理:
1. 先尝试固定验证码 `123456`mock 模式)
2. 失败后自动发送验证码并重试
3. 等待 200ms 后重新登录
### Q: 商品详情 404 率高怎么办?
**A:** 工具已自动修复:
- 启动时从 `/api/listings` 预加载可用商品 ID
- 自动使用真实存在的商品 ID 进行测试
### Q: 如何提高成功率?
**A:**
1. 增加 `--warmup` 参数生成更多 token
2. 降低并发数 `-c`
3. 检查数据是否正常生成
### Q: 梯度压测的作用是什么?
**A:**
- 逐步增加负载,观察系统性能变化
- 找到系统性能拐点和极限
- 避免冷启动导致的误判
---
## 下一步
1. **执行完整压测**100-200并发,持续5-10分钟
2. **性能调优**:根据慢查询日志优化索引
3. **容量规划**:根据压测结果评估单机承载能力
4. **监控集成**:接入 Prometheus + Grafana
---
## 参考文档
- 详细技术指南:`docs/stress-test-guide.md`
- 项目架构分析:`docs/项目架构分析报告.md`
- API 文档:`docs/api.md`
---
**最后更新**2026-06-06
**维护人**Claude Opus 4.8