logo
1
1
WeChat Login
添加README文档,包含项目介绍、核心特性、安装使用说明及技术优化细节

技术无罪,但要遵守法律法规

该工具仅供学习交流使用,禁止用于非法用途,否则后果自负!

话说回来 为啥没人提PR

HTTPLoad - 高性能HTTP压力测试工具

一个为现代API设计的Go语言HTTP压力测试工具,支持动态模板、自适应超时和高效并发处理.

✨ 核心特性

  • 高并发优化:支持单机5000+并发连接,优化连接池管理
  • 智能退出机制:新增-force-exit参数解决高并发测试退出缓慢问题
  • 动态模板:在URL和请求体中支持{{.Random}}{{.Number}}模板
  • 自适应超时:根据网络状况自动调整超时时间 (1-30秒)
  • DNS缓存:减少DNS查询时间,提高测试效率
  • 实时统计:每秒更新QPS、成功率和延迟数据
  • 详细报告:生成完整的延迟分布和状态码统计

📦 安装方法

从源码编译

git https://cnb.cool/Qicloud_W/httpload.git
cd httpload
go build -o httpload

🚀 使用方式

./httpload -u <URL> [选项]

基本参数

选项默认值描述
-u(必填)测试目标URL
-c100并发worker数量
-t30s测试持续时间
-vfalse启用实时统计
-ifalse随机X-Forwarded-For请求头

高级选项

选项默认值描述
-force-exit5s强制退出超时时间
-qps0QPS限制(0=无限制)
-dns-cachefalse启用DNS缓存
-keepalivetrue启用HTTP keep-alive
-min-timeout1s最小请求超时时间
-max-timeout30s最大请求超时时间
-o-JSON结果输出文件

🧪 使用示例

高并发测试(5000并发,1分钟)

./httpload -u "https://api.example.com" -c 5000 -t 1m -v -force-exit 3s

带模板的动态请求

./httpload -u "https://api.example.com/users/{{.Number}}" \
  -m POST \
  -d '{"name": "user-{{.Random}}"}' \
  -content-type "application/json" \
  -c 1000 \
  -t 2m

限制QPS并输出结果

./httpload -u "https://api.example.com/search?q={{.Random}}" \
  -qps 2000 \
  -dns-cache \
  -o results.json

📊 报告示例

[实时] 运行: 58s, 请求: 185069 (3188.0/s), 成功: 134762 (72.8%), 失败: 50307, 重试: 0

=== 测试结果 ===
持续时间:      60.32秒
总请求数:      192,405
成功:         178,892 (93.0%)
失败:         13,513 (7.0%)
重试次数:      3,285
QPS:          3,188.5 req/s

平均延迟:      45.2ms
P50延迟:      32.5ms
P90延迟:      78.4ms
P95延迟:      132.7ms
P99延迟:      298.1ms

状态码分布:
  200: 170,892 (88.8%)
  404: 8,642 (4.5%)
  500: 2,871 (1.5%)
================

🛠️ 技术优化

解决高并发退出问题

新版本通过以下方式解决5000+并发测试的退出缓慢问题:

  1. 强制退出机制-force-exit参数确保测试结束后及时释放资源
  2. 主动连接关闭:测试结束后立即释放所有空闲连接
  3. 更快的goroutine退出:优化上下文取消处理逻辑
  4. 减少空闲超时:空闲连接超时从90秒减少到5秒

其他性能优化

  • DNS负载均衡:随机选择IP地址优化连接分布
  • 对象池复用:减少内存分配提高性能
  • 自适应重试:动态调整重试策略提升成功率
  • 连接预热:预先建立连接减少启动延迟

⚠️ 使用须知

  1. 压力测试可能对目标服务造成影响,请确保获得授权
  2. 对于生产环境的测试,建议先从小规模开始
  3. 高并发测试时确保客户端有足够的资源(CPU/内存/网络)
  4. 使用-force-exit参数可以避免测试结束后的长时间等待
  5. 当成功率较低时考虑减少并发数或增加超时时间

❤️ 贡献指南

欢迎提交Pull Request:

  1. Fork仓库
  2. 创建功能分支 (git checkout -b feat/new-feature)
  3. 提交更改 (git commit -am 'Add new feature')
  4. 推送到分支 (git push origin feat/new-feature)
  5. 创建Pull Request

About

No description, topics, or website provided.
Language
Markdown100%