Hrequest
轻量级 Node.js 多线程 API 压测工具,支持代理轮询、请求参数随机化注入和实时进度监控。
- Stars
- 1
- Language
- JavaScript
- Created
- Sep 2, 2026
- Updated
- Sep 2, 2026
Introduction
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 倍