Hrequest
轻量级 Node.js 多线程 API 压测工具,支持代理轮询、请求参数随机化注入和实时进度监控。
项目结构
Hrequest/
├── src/
│ ├── index.js # 主入口:加载配置、创建工作线程、输出结果
│ ├── worker.js # Worker 线程:发起 HTTP 请求
│ └── utils/
│ ├── config.js # 配置文件加载与校验
│ ├── helpers.js # 通用工具:随机字符串、代理加载
│ ├── logger.js # 统一日志输出
│ ├── progress.js # 进度条管理
│ └── stats.js # 统计指标聚合
├── config.json # 压测配置文件(复制为 config.dev.json 等自定义)
├── .gitignore
├── package.json
└── README.md
快速开始
1. 安装依赖
npm install
2. 配置压测参数
编辑 config.json(或传入自定义路径):
{
"req": {
"url": "http://localhost:8080/api/test",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
"data": {
"userId": "${random8}",
"timestamp": "${random}"
}
},
"proxy": "./proxy.txt",
"worker": 10,
"interval": 10,
"duration": 60000,
"timeout": 5000
}
3. 运行压测
# 使用默认 config.json
npm start
# 指定自定义配置文件
npm start -- ./config.dev.json
配置项说明
| 字段 |
类型 |
必填 |
说明 |
req.url |
string |
✅ |
目标 API 地址 |
req.method |
string |
❌ |
HTTP 方法,默认 GET |
req.headers |
object |
❌ |
请求头 |
req.data |
object |
❌ |
请求体(POST/PUT/PATCH 时生效) |
proxy |
string |
❌ |
代理列表:本地文件路径或 HTTP URL;留空则不使用代理 |
worker |
number |
✅ |
工作线程数 |
interval |
number |
✅ |
每个线程的请求间隔(毫秒) |
duration |
number |
✅ |
压测总时长(毫秒) |
timeout |
number |
❌ |
单个请求超时时间(毫秒),默认 5000 |
并发数估算
并发数 ≈ worker × (1000 / interval)
例如:worker=10, interval=10 → 约 1000 并发请求
代理文件
代理文件 proxy.txt 格式(每行一个):
43.224.116.188:25251
36.91.68.147:8080
http://103.153.247.118:8387
也可通过 HTTP URL 动态拉取代理列表:
"proxy": "http://your-proxy-service/proxies.txt"
随机字符注入
在 req.url、req.headers、req.data 中任意位置使用:
| 语法 |
效果 |
${random} |
生成 8 位随机字符串 |
${random8} |
生成 8 位随机字符串 |
${random16} |
生成 16 位随机字符串 |
${randomN} |
生成 N 位随机字符串 |
示例:
{
"url": "https://api.example.com/user/${random8}",
"headers": {
"X-Request-ID": "req-${random16}"
},
"data": {
"username": "user_${random10}"
}
}
运行指标
压测过程中终端实时显示:
进度 |████████░░░░░░░░░░░░░░░░░░| 40% || 5000 请求 || 成功率: 98.2% || 线程: 10/10 || 超时: 3 || 401: 0 || 403: 2
测试结束后的统计报告:
=== API压测统计 ===
总请求数: 5000
成功请求: 4925 (98.50%)
失败请求: 75
平均响应时间: 123.45ms
请求速率: 492.50 req/s
运行时间: 10.15s
401/403: 0/2
超时: 3
=====================
依赖说明
| 包名 |
用途 |
axios |
HTTP 请求库 |
cli-progress |
终端进度条 |
https-proxy-agent |
HTTPS 代理支持 |
常见问题
请求成功率低
- 检查目标 API 是否正常
- 减小
worker 或增大 interval
- 确认代理服务器有效(可先手动测试)
代理不生效
- 确认代理文件格式正确(
ip:port 或 http://ip:port)
- 每行一个代理,不要有空行
- 测试代理是否可连通目标服务器
内存占用过高
- 减少
worker 数量
- 缩短
duration
- 检查代理存活率,无效代理会导致重试堆积
401/403 错误增多
- Token 可能已过期,更新
Authorization 头
- 检查接口权限配置
注意事项
- 请勿将含真实代理地址的文件提交至代码仓库
duration 单位是毫秒,60000 = 60秒
- 工作线程数建议不超过 CPU 核心数的 2~4 倍