http压测wrk使用教程
目录
WRK是一个现代的HTTP基准测试工具,能够在单个多核CPU上运行时产生大量的负载。它将多线程设计与可伸缩的事件通知系统(Base: epoll和kqueue)结合在一起。
一、安装
1 2 3 4 |
git clone https://github.com/wg/wrk.git wrk cd wrk make sudo cp wrk /usr/local/bin |
二、压测
1 2 |
# 使用12个线程运行30秒, 400个http并发 wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html |
三、参数
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-c, --connections: 总的http并发数 -d, --duration: 持续压测时间, 比如: 2s, 2m, 2h -t, --threads: 总线程数 -s, --script: luajit脚本,使用方法往下看 -H, --header: 添加http header, 比如. "User-Agent: wrk" --latency: 在控制台打印出延迟统计情况 --timeout: http超时时间 |
四、lua脚本压测
使用get方法指定header压力测试示例
1 |
wrk -t30 -c250 -d15s -H "Authorization: Basic YourBasicAuthEncode" "http://127.0.0.1:8080/test?query=test&debug=true" |
使用post方法压力测试示例
1 2 3 4 5 6 7 |
wrk -t20 -c1000 -d30s -s /path/post.lua http://127.0.0.1:8080/test # post.lua文件内容 wrk.method = "POST" wrk.body = “protobuf-data” wrk.headers["Content-Type"] = "application/x-protobuf" wrk.headers["Content-Encoding"] = "gzip" |
使用post json方法压力测试示例
1 2 3 4 5 6 |
wrk -t20 -c1000 -d30s -s /path/post.lua http://127.0.0.1:8080/test # post.lua文件内容 wrk.method = "POST" wrk.body = '{"firstKey": "somedata", "secondKey": "somedata"}' wrk.headers["Content-Type"] = "application/json" |
使用post json方法带BasicAuth压力测试示例
1 2 3 4 5 6 |
wrk -t30 -c1000 -d30s -s /path/post.lua -H "Authorization: Basic xxxxxxxx" "http://127.0.0.1:8080/test" # post.lua文件内容 wrk.method = "POST" wrk.body = '{"firstKey": "somedata", "secondKey": "somedata"}' wrk.headers["Content-Type"] = "application/json" |
DDCC压力测试示例
1 2 3 4 5 |
request = function() uid = math.random(1, 10000000) path = "/test?uid=" .. uid return wrk.format(nil, path) end |
函数说明
wrk.format这个函数的作用,根据参数和全局变量wrk生成一个http请求 函数签名: function wrk.format(method, path, headers, body) method:http方法,比如GET/POST等 path: url上的路径(含函数) headers: http header body: http body
登录压测示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
token = nil path = "/authenticate" request = function() return wrk.format("GET", path) end response = function(status, headers, body) if not token and status == 200 then token = headers["X-Token"] path = "/resource" wrk.headers["X-Token"] = token end end |
五、项目地址
1 2 3 |
https://github.com/wg/wrk # 压测脚本示例 https://github.com/wg/wrk/tree/master/scripts |
by:cpp.la