logo
1
1
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%