HTTP Bench 压测示例文档
July 24, 2026 · View on GitHub
本文档提供了 HTTP Bench 工具的详细使用示例,涵盖各种测试场景和高级功能。
目录
基础压测示例
1. 简单GET请求
# 发送1000个请求,10个并发连接
./http_bench -n 1000 -c 10 "http://127.0.0.1:8080/api/test"
# 指定请求方法
./http_bench -n 1000 -c 10 -m GET "http://127.0.0.1:8080/api/users"
2. 基于时间的压测
# 持续压测30秒
./http_bench -d 30s -c 50 "http://127.0.0.1:8080/api/test"
# 持续压测5分钟
./http_bench -d 5m -c 100 "http://127.0.0.1:8080/api/test"
# 持续压测1小时
./http_bench -d 1h -c 200 "http://127.0.0.1:8080/api/test"
3. QPS限制测试
# 限制每秒100个请求
./http_bench -d 60s -c 10 -q 100 "http://127.0.0.1:8080/api/test"
# 限制每秒500个请求,持续10分钟
./http_bench -d 10m -c 50 -q 500 "http://127.0.0.1:8080/api/test"
4. POST请求示例
# 简单POST请求
./http_bench -n 1000 -c 20 -m POST "http://127.0.0.1:8080/api/users" \
-body '{"name":"test","email":"test@example.com"}'
# 带自定义头部的POST请求
./http_bench -n 500 -c 10 -m POST "http://127.0.0.1:8080/api/login" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token123" \
-body '{"username":"admin","password":"secret"}'
5. 使用 .http 文件测试(多请求)
支持标准的 .http 文件格式(兼容 IntelliJ/VSCode REST Client)。你可以定义多个请求,使用 ### 分隔。
压测工具将按顺序对文件定义的每个请求进行压测。
# 创建包含多个请求的 .http 文件
cat > requests.http << EOF
# 请求 1: 获取用户列表
GET http://127.0.0.1:8080/api/users
###
# 请求 2: 创建数据(带 JSON 请求体)
POST http://127.0.0.1:8080/api/data
Content-Type: application/json
{
"name": "test",
"value": 123
}
EOF
# 使用文件中的请求运行压测
# 这将先运行第一个请求的压测,完成后运行第二个
./http_bench -n 1000 -c 20 -file requests.http
HTTP协议测试
1. HTTP/1.1 测试(默认)
./http_bench -d 60s -c 50 -http http1 "http://127.0.0.1:8080/api/test"
2. HTTP/2 测试
# HTTP/2 GET请求
./http_bench -d 30s -c 20 -http http2 "https://127.0.0.1:8443/api/test"
# HTTP/2 POST请求
./http_bench -d 60s -c 30 -http http2 -m POST "https://127.0.0.1:8443/api/data" \
-body '{"message":"HTTP/2 test"}'
3. HTTP/3 测试
# HTTP/3 测试(需要服务器支持QUIC)
./http_bench -d 30s -c 15 -http http3 "https://127.0.0.1:8443/api/test"
# HTTP/3 POST请求
./http_bench -d 60s -c 25 -http http3 -m POST "https://127.0.0.1:8443/api/upload" \
-body '{"file":"test.txt","size":1024}'
WebSocket测试
1. 基础WebSocket测试
# WebSocket连接测试
./http_bench -d 30s -c 10 -http ws "ws://127.0.0.1:8080/ws" \
-body '{"type":"ping","data":"hello"}'
2. 安全WebSocket测试
# WSS (WebSocket Secure) 测试
./http_bench -d 60s -c 20 -http wss "wss://127.0.0.1:8443/ws" \
-body '{"type":"message","content":"secure websocket test"}'
分布式压测
1. 启动Worker节点
# 在机器1上启动worker
./http_bench -listen "192.168.1.10:12710" -verbose 1
# 在机器2上启动worker
./http_bench -listen "192.168.1.11:12710" -verbose 1
# 在机器3上启动worker
./http_bench -listen "192.168.1.12:12710" -verbose 1
2. 运行分布式测试
# 协调多个worker进行压测
./http_bench -d 300s -c 100 "http://target-server.com/api/test" \
-W "192.168.1.10:12710" \
-W "192.168.1.11:12710" \
-W "192.168.1.12:12710" \
-verbose 1
# 分布式POST测试
./http_bench -d 600s -c 200 -m POST "http://target-server.com/api/load-test" \
-body '{"test_id":"distributed_test","timestamp":"2024-01-01T00:00:00Z"}' \
-W "192.168.1.10:12710" \
-W "192.168.1.11:12710" \
-W "192.168.1.12:12710"
模板函数使用
1. 随机数据生成
# 随机整数
./http_bench -n 100 -c 5 "http://127.0.0.1:8080/api/test?id={{ random 1 10000 }}"
# 随机字符串
./http_bench -n 100 -c 5 -m POST "http://127.0.0.1:8080/api/users" \
-body '{"username":"{{ randomString 8 }}","email":"{{ randomString 10 }}@test.com"}'
# 随机数字字符串
./http_bench -n 100 -c 5 "http://127.0.0.1:8080/api/order?order_id={{ randomNum 10 }}"
2. 日期和时间函数
# 当前日期
./http_bench -n 50 -c 3 -m POST "http://127.0.0.1:8080/api/events" \
-body '{"event_date":"{{ date "YMD" }}","timestamp":"{{ date "YMDHMS" }}"}'
# 随机日期
./http_bench -n 50 -c 3 "http://127.0.0.1:8080/api/history?date={{ randomDate "YMD" }}"
3. UUID和字符串处理
# UUID生成
./http_bench -n 100 -c 5 -m POST "http://127.0.0.1:8080/api/sessions" \
-body '{"session_id":"{{ UUID }}","user_id":{{ random 1 1000 }}}'
# 字符串转义
./http_bench -n 50 -c 3 "http://127.0.0.1:8080/api/search?q={{ randomString 10 | escape }}"
4. 十六进制转换
# 字符串转十六进制
./http_bench -n 50 -c 3 -m POST "http://127.0.0.1:8080/api/encode" \
-body '{"data":"{{ stringToHex "hello world" }}"}'
# 十六进制转字符串
./http_bench -n 50 -c 3 -m POST "http://127.0.0.1:8080/api/decode" \
-body '{"hex_data":"{{ hexToString "48656c6c6f20576f726c64" }}"}'
5. 数学函数
# 整数求和
./http_bench -n 50 -c 3 "http://127.0.0.1:8080/api/calc?result={{ intSum 10 20 30 40 }}"
# 组合使用多个函数
./http_bench -n 100 -c 5 -m POST "http://127.0.0.1:8080/api/complex" \
-body '{"id":"{{ UUID }}","value":{{ random 1 1000 }},"name":"{{ randomString 8 }}","date":"{{ date "YMD" }}"}'
高级配置
1. 认证和代理
# Basic认证
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/secure" \
-a "username:password"
# 使用HTTP代理
./http_bench -n 500 -c 10 "http://target-server.com/api/test" \
-x "proxy-server.com:8080"
# 组合使用认证和代理
./http_bench -n 1000 -c 15 "http://target-server.com/api/secure" \
-a "admin:secret123" \
-x "proxy-server.com:8080"
2. 连接控制
# 禁用压缩
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/test" \
--disable-compression
# 禁用Keep-Alive
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/test" \
--disable-keepalive
# 设置超时时间(毫秒)
./http_bench -n 1000 -c 20 -t 5000 "http://127.0.0.1:8080/api/slow"
3. 输出格式
# CSV格式输出
./http_bench -n 1000 -c 20 -o csv "http://127.0.0.1:8080/api/test" > results.csv
# HTML格式输出
./http_bench -n 1000 -c 20 -o html "http://127.0.0.1:8080/api/test" > results.html
# 详细日志输出
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/test" -verbose 0 # TRACE
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/test" -verbose 1 # DEBUG
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/test" -verbose 2 # INFO
4. Web仪表盘
# 启动Web仪表盘
./http_bench -listen "127.0.0.1:12345" -verbose 1
# 然后在浏览器中访问: http://127.0.0.1:12345
仪表盘页面在 worker 节点上异步执行压测,并按可调间隔(默认 2000 毫秒)轮询
/api 接口获取指标,实时渲染:
- QPS 与各状态码曲线
- 概览卡片:平均耗时、平均 QPS、最快/最慢耗时、错误总数
- 响应耗时分布直方图与错误分布饼图
测试可随时在页面上停止;压测结束时自动渲染最后一帧数据。界面语言可在 右上角切换中英文。
性能调优
1. CPU核心数设置
# 使用所有CPU核心
./http_bench -n 10000 -c 100 "http://127.0.0.1:8080/api/test" --cpus 8
# 限制使用4个CPU核心
./http_bench -n 10000 -c 100 "http://127.0.0.1:8080/api/test" --cpus 4
2. 环境变量优化
# 设置GC百分比以减少垃圾回收频率
export HTTPBENCH_GOGC=200
./http_bench -n 50000 -c 500 "http://127.0.0.1:8080/api/test"
# 设置Worker API端点
export HTTPBENCH_WORKERAPI="/v2/worker"
./http_bench -listen "127.0.0.1:12345"
3. 大规模压测示例
# 高并发短时间测试
./http_bench -d 60s -c 1000 -q 5000 "http://127.0.0.1:8080/api/test" --cpus 16
# 长时间稳定性测试
./http_bench -d 24h -c 200 -q 1000 "http://127.0.0.1:8080/api/test" --cpus 8
# 极限压测
./http_bench -d 300s -c 2000 "http://127.0.0.1:8080/api/test" \
--disable-keepalive \
--cpus 32 \
-verbose 1
故障排除
1. 常见错误处理
# 连接超时问题 - 增加超时时间
./http_bench -n 1000 -c 20 -t 10000 "http://slow-server.com/api/test"
# 证书问题 - 使用HTTP而非HTTPS进行测试
./http_bench -n 1000 -c 20 "http://127.0.0.1:8080/api/test"
# 内存不足 - 减少并发数
./http_bench -n 10000 -c 50 "http://127.0.0.1:8080/api/test"
2. macOS编译问题
# 如果在macOS Catalina上编译遇到问题
export CGO_CPPFLAGS="-Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined"
go build .
3. 调试技巧
# 启用详细日志进行调试
./http_bench -n 10 -c 2 "http://127.0.0.1:8080/api/test" -verbose 0
# 测试单个请求
./http_bench -n 1 -c 1 "http://127.0.0.1:8080/api/test" -verbose 0
# 检查连接问题
./http_bench -n 5 -c 1 -t 30000 "http://127.0.0.1:8080/api/test" -verbose 1
实际场景示例
1. API性能基准测试
# 用户登录API测试
./http_bench -d 300s -c 50 -m POST "http://api.example.com/auth/login" \
-H "Content-Type: application/json" \
-body '{"username":"{{ randomString 8 }}","password":"test123"}' \
-verbose 2
# 数据查询API测试
./http_bench -d 600s -c 100 -q 200 "http://api.example.com/users/{{ random 1 10000 }}" \
-H "Authorization: Bearer token123" \
-verbose 2
2. 电商网站压测
# 商品列表页面
./http_bench -d 1800s -c 200 "http://shop.example.com/products?page={{ random 1 100 }}" \
-verbose 2
# 购物车操作
./http_bench -d 900s -c 80 -m POST "http://shop.example.com/cart/add" \
-H "Content-Type: application/json" \
-body '{"product_id":{{ random 1 1000 }},"quantity":{{ random 1 5 }},"user_id":"{{ UUID }}"}' \
-verbose 2
3. 微服务架构测试
# 服务间通信测试
./http_bench -d 600s -c 150 -m POST "http://service-a.internal:8080/api/process" \
-H "X-Request-ID: {{ UUID }}" \
-H "Content-Type: application/json" \
-body '{"data":"{{ randomString 50 }}","timestamp":"{{ date "YMDHMS" }}"}' \
-verbose 1
4. 负载均衡测试
# 测试负载均衡器分发
./http_bench -d 1200s -c 300 "http://lb.example.com/health" \
-H "X-Client-ID: {{ randomString 16 }}" \
-verbose 2