wrk 使用教程
wrk 是轻量、高性能的 HTTP 压测工具,基于多线程 + 异步 IO,比 ab、JMeter 更简单高效,适合测试接口/网站的并发承载能力。
一、先安装 wrk
macOS
bash
brew install wrk
Ubuntu/Debian
bash
sudo apt-get install wrk
CentOS/RHEL
bash
sudo yum install wrk
Windows 可使用 WSL 或 Docker 运行。
二、最基础用法
bash
wrk -t 线程数 -c 连接数 -d 压测时间 测试URL
最简示例(最常用)
bash
wrk -t4 -c100 -d30s http://127.0.0.1:8080/
-t4:使用 4 个线程(一般 = CPU 核心数)-c100:模拟 100 个并发连接-d30s:压测 30 秒- 最后直接跟要压测的地址
三、常用参数说明
| 参数 | 作用 |
|---|---|
-t <num> |
线程数(推荐 = CPU 核心数) |
-c <num> |
总并发连接数 |
-d <time> |
压测时长,如 2s、10s、2m |
-H <header> |
添加请求头 |
-m <method> |
指定请求方法(GET/POST/PUT...) |
-s <script.lua> |
使用 Lua 脚本(支持 POST、自定义请求) |
-R <rate> |
限制每秒请求数(限流压测) |
四、常用实战命令
1. GET 接口压测(带请求头)
bash
wrk -t4 -c200 -d10s -H "Token: abc123" -H "Accept: application/json" http://127.0.0.1:8080/api/user
2. POST 接口压测(必须用 Lua 脚本)
新建 post.lua:
lua
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = '{"username":"test","password":"123456"}'
执行:
bash
wrk -t4 -c100 -d10s -s post.lua http://127.0.0.1:8080/api/login
3. 限流压测(固定 QPS)
bash
wrk -t4 -c100 -d10s -R 500 http://127.0.0.1:8080/
-R 500:每秒最多发 500 请求
五、结果怎么看
运行后会输出:
Running 30s test @ http://127.0.0.1:8080/
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 10.2ms 5.1ms 50.3ms 90.12%
Req/Sec 5.2k 1.1k 10.0k 85.23%
931230 requests in 30.00s, 122.10MB read
Requests/sec: 31041.00 # QPS(核心指标)
Transfer/sec: 4.07MB/s
重点看 2 个值:
Requests/sec:每秒请求数(QPS)Latency:接口平均响应时间
六、小技巧
- 线程数
-t建议设置为 CPU 核心数 - 并发
-c一般比线程数大(如 4 线程 → 100~500 连接) - 压测前关闭本机防火墙、占用带宽的程序
- 服务端和压测机不要同一台机器,否则数据不准
- 需要复杂压测(登录、参数化、多接口)用 Lua 脚本
总结
- 基础命令:
wrk -t4 -c100 -d30s URL - GET 加头:
-H "Key: Value" - POST 必须用
-s script.lua - 核心指标:QPS、平均延迟
wrk 本身不直接生成可视化测试报告 ,但可以通过输出日志 + 简单解析/格式化 得到标准压测报告,下面分两种方案:纯文本日志报告(即用即走) 、简易格式化报告,附模板、实操命令和报告解读。
一、方案1:保存原始压测日志(最常用)
直接把 wrk 输出重定向到文件,就是原始测试报告。
1. 基础 GET 压测 + 保存报告
bash
# 格式:wrk 参数 URL > 报告文件名.txt
wrk -t4 -c200 -d30s http://127.0.0.1:8080/api > wrk_report_get.txt
2. POST 脚本压测 + 保存报告
bash
# 结合 lua 脚本,输出到报告文件
wrk -t4 -c200 -d30s -s post.lua http://127.0.0.1:8080/api/login > wrk_report_post.txt
运行后当前目录会生成 .txt 文件,可直接作为原始测试报告。
二、方案2:结构化测试报告模板(可直接上交)
报告头部(手动填写基础信息)
=============================================
HTTP 接口压测报告
工具:wrk
压测时间:YYYY-MM-DD HH:mm:ss
被测接口:http://xxx.xxx.xxx/api
请求方式:GET / POST
线程数(t):4
并发连接数(c):200
压测时长(d):30s
请求头/请求体:(按需填写)
=============================================
三、wrk 输出字段释义(报告核心解读)
以典型输出为例:
Running 30s test @ http://127.0.0.1:8080/api
4 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 8.5ms 3.2ms 42.1ms 92.30% # 响应延迟
Req/Sec 12.6k 890.00 15.2k 88.10% # 单线程每秒请求
368920 requests in 30.00s, 48.60MB read
Requests/sec: 12297.33 # 【核心QPS】总每秒请求数
Transfer/sec: 1.62MB/s # 每秒数据传输量
报告关键指标说明(写入报告)
- Latency(响应延迟)
- Avg:平均响应时间
- Max:最大响应时间
- Requests/sec:整体 QPS,接口吞吐能力核心指标
- 总请求数:压测周期内成功请求总量
- 错误说明 :若有超时/失败,wrk 会显示
Socket errors,代表接口异常
四、进阶:过滤错误、精简报告
只保留核心数据,过滤冗余信息:
bash
wrk -t4 -c200 -d30s URL | grep -E "Latency|Req/Sec|Requests/sec|Transfer/sec" > report_simple.txt
五、完整示例(一份成品简易报告)
=============================================
HTTP接口压测报告
压测工具:wrk
压测时间:2026-06-10 15:30:00
被测接口:http://127.0.0.1:8080/api/login
请求方式:POST
压测配置:线程4、并发200、时长30秒
请求体:{"username":"test","pwd":"123456"}
=============================================
【性能指标】
平均响应延迟:8.5ms
最大响应延迟:42.1ms
整体QPS:12297.33
每秒传输流量:1.62MB/s
总请求量:368920
【测试结论】
接口在200并发下运行稳定,无连接错误,响应速度正常。
补充
- 如果需要 HTML/图表报告 :wrk 原生不支持,可结合
wrk2csv + Python/Excel绘图,日常接口压测用上面文本报告足够。 - 多次梯度压测(50/100/300 并发):分别保存不同文件,做多组对比报告即可。