logo
0
0
WeChat Login
ForkfromQicloud_W/httpload, behind:main61 commits
"新增自定义请求头支持(-H参数),允许通过命令行设置多个HTTP头,更新README文档说明"

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

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

HTTP压力测试工具使用文档

一、功能特性

✅ 支持GET/POST方法

✅ 动态模板变量({{.Random}}和{{.Number}})

✅ 智能连接池管理

✅ 实时统计QPS和延迟

✅ 并发控制(最高支持10万并发)

✅ 自动内存复用机制

二、快速安装

安装Go环境(需1.18+)

编译项目

go build -o httpload

三、参数说明

./httpload \ -u "http://example.com/?q={{.Random | urlquery}}" \ # 必填URL(支持模板) -m GET \ # 请求方法 [GET|POST] (默认GET) -c 1000 \ # 并发数 (默认100) -t 60s \ # 测试时长 (默认30s) -d "data={{.Number}}" \ # POST数据模板 -content-type "application/json" # Content-Type头 -H "Authorization:Bearer token,X-Custom-Header:value"

四、使用示例

基础GET测试

./httpload -u "http://api.example.com/search?q={{.Random}}" -c 500 -t 5m

带参数的POST测试

./httpload -m POST \ -u "https://api.example.com/users" \ -d '{"name":"{{.Random}}", "age":{{.Number}}}' \ -content-type "application/json" \ -c 2000 \ -t 300s

表单编码POST测试

./httpload -m POST \ -u "http://login.example.com" \ -d "username={{.Random}}&password={{.Number}}" \ -content-type "application/x-www-form-urlencoded" \ -c 1000

五、模板变量

变量名类型示例值说明
{{.Random}}string"aB3x9mNkL8h2"12位随机字母数字组合(大小写敏感)
{{.Number}}int8346920-999999之间的随机整数

六、性能优化建议

1. 连接池调优:

在高速网络环境下可调整

export GODEBUG=http2debug=1 # 启用HTTP/2 ulimit -n 100000 # 提升文件描述符限制

2. 推荐运行参数:

适用于8核16GB服务器

./httpload -c 5000 -t 300s ...

3. 监控建议:

watch -n 1 "netstat -ant | grep ESTABLISHED | wc -l" # 查看连接数 nload -u M

监控网络带宽

七、常见问题解答

❓ 证书错误怎么办?

在Transport配置添加(代码第95行附近)

Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }

❓ 如何控制测试时间?

测试实际持续时间 = min(指定时长, 请求处理时间)。强制停止用Ctrl+C

❓ 为什么实际QPS比预期低?

  1. 检查服务端日志确认请求到达

  2. 使用-c逐步增加并发数(建议以100为单位递增)

  3. 运行top监控CPU和内存使用

❓ 随机字符串长度能改吗?

修改代码第183行fastRandomString(rng, 12)中的数字

❓ 测试结果不准确?

统计误差 < 0.1%,因以下情况可能丢失计数:

DNS解析失败

TLS握手超时

客户端缓冲区溢出

建议测试时间至少30秒以获得稳定结果

About

HTTP压力测试工具