Spaces:
Running
Running
File size: 2,716 Bytes
24a2ddf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # PDF 导出压力测试工具
用于测量 PDF 导出后端 (`/api/generate_pdf`) 的并发承载能力(同时能有多少用户导出 PDF)。
## 文件
| 文件 | 说明 |
|------|------|
| `payload-generator.js` | 生成确定性的仿真 PDF HTML 负载(文本 + Shiki 代码块 + base64 图片) |
| `run-stress-test.js` | 主压力测试脚本:按并发梯度打请求,统计成功率/延迟/吞吐 |
| `monitor-docker.js` | 并行监控 docker 容器 CPU/内存,与压力测试结果关联 |
| `verify-pdf-output.js` | 生成一份 PDF 保存到磁盘,验证输出为真实 PDF(`%PDF-1.x` 魔数) |
| `test-widget-batch.js` | 批量 widget 渲染验证(模拟 PDF/DOCX 导出的 `render_charts` 调用) |
| `results/` | 测试报告 JSON + 监控 JSON |
## 用法
```bash
# 基线/优化后对比测试(medium 负载)
node tests/stress/run-stress-test.js \
--base http://localhost:17861 \
--concurrency 1,2,4,6,8 \
--total 8 \
--profile medium \
--settle-ms 3000 \
--tag opt-pool4
# 并行监控 docker 资源(在另一个终端运行)
node tests/stress/monitor-docker.js \
--containers pdf-test,pdf-prod \
--interval 2000 \
--duration 240000 \
--out tests/stress/results/monitor-x.json
# 校验 PDF 输出质量
node tests/stress/verify-pdf-output.js
# 验证批量 widget 渲染
node tests/stress/test-widget-batch.js
```
## 参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--base` | `http://localhost:17861` | 后端地址(17861=测试容器,7860=生产容器) |
| `--concurrency` | `1,2,4,6,8` | 并发梯度(逗号分隔,每个梯度跑 `--total` 个请求) |
| `--total` | `20` | 每个并发梯度下总请求数 |
| `--profile` | `medium` | 负载规格:`small`(62KB) / `medium`(375KB+3图) / `large`(1.24MB+10图) |
| `--settle-ms` | `10000` | 每个梯度之间的冷却时间,让内存回落 |
| `--tag` | `` | 报告文件名后缀,用于区分基线/优化 |
| `--timeout-ms` | `180000` | 单请求超时 |
## 报告解读
- `throughputPerMin` 基于**墙钟时间**(该梯度内实际完成的请求数/分钟),反映系统真实吞吐。
- `latencyMs` 是每个请求从发起到收到响应的耗时(含排队等待)。
- 失败分类:`500`=服务端错误,`conn/...`=连接层错误。
## 重要提示
1. **本机 docker 不能完全模拟 Hugging Face**:HF 免费版 = 2 vCPU / 16GB;本机 docker 为 16 核。本机测出的并发上限是 HF 的**上界**,HF 上需按 `PDF_POOL_SIZE=2` 部署。
2. 测试前确认 `pdf-test` 容器已用最新代码重建。
3. 机器上还跑着其他系统(如 xianzhi-*),测试不要设置过大的并发,避免干扰。
|