Back to home@freerpa

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.urlstring目标 API 地址
req.methodstringHTTP 方法,默认 GET
req.headersobject请求头
req.dataobject请求体(POST/PUT/PATCH 时生效)
proxystring代理列表:本地文件路径或 HTTP URL;留空则不使用代理
workernumber工作线程数
intervalnumber每个线程的请求间隔(毫秒)
durationnumber压测总时长(毫秒)
timeoutnumber单个请求超时时间(毫秒),默认 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.urlreq.headersreq.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
=====================

依赖说明

包名用途
axiosHTTP 请求库
cli-progress终端进度条
https-proxy-agentHTTPS 代理支持

常见问题

请求成功率低

  • 检查目标 API 是否正常
  • 减小 worker 或增大 interval
  • 确认代理服务器有效(可先手动测试)

代理不生效

  • 确认代理文件格式正确(ip:porthttp://ip:port
  • 每行一个代理,不要有空行
  • 测试代理是否可连通目标服务器

内存占用过高

  • 减少 worker 数量
  • 缩短 duration
  • 检查代理存活率,无效代理会导致重试堆积

401/403 错误增多

  • Token 可能已过期,更新 Authorization
  • 检查接口权限配置

注意事项

  • 请勿将含真实代理地址的文件提交至代码仓库
  • duration 单位是毫秒,60000 = 60秒
  • 工作线程数建议不超过 CPU 核心数的 2~4 倍