Spaces:
Running
Running
| # 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-*),测试不要设置过大的并发,避免干扰。 | |