以前一说到http的压力测试工具,多数人会说 ab、webbench、siege。 但这些工具不管是性能还是复杂度已经不能满足我们的需求了。 用wrk只是为了更好的获取吞吐。
1.WRK安装
Mac brew install mac
Linux https://github.com/wg/wrk.git && cd wrk && make
2. Wrk参数
输入wrk –help
-c, –connections 需要模拟的连接数
-d, –duration 测试时间
-t, –threads 使用线程数量
-s, –script 加载lua脚本
-H, –header http头
–latency 显示延迟统计
–timeout 超时
3. Wrk测试
3. Wrk lua介绍
不使用脚本wrk仅支持简单http get请求, 如需POST/PUT/DELETE请求需要写Lua脚本, 使用Lua脚本可以控制每次请求header/body等。
1 | wrk.method = "POST" |
wrk -t4 -c2000 -d60s -T5s –script=post.lua –latency http://baidu.com
上面简单Lua脚本时间wrk使用POST请求,header中Content-Type=application/json, body内容为{“a”:100, “b”:200}
wrk lua脚本函数说明:
1 | setup 线程出事后支持会调用一次 |
function setup(thread)
1 | -- thread提供了1个属性,3个方法 |
function init(args)
1 | -- 每个线程仅调用1次,args 用于获取命令行中传入的参数, 例如 --env=pre |
function request()
1 | -- 每个线程调用多次,返回http请求 |
function response(status, headers, body)
– do something
end
1 | -- 每个线程调用多次,返回http响应 |
function delay()
1 | -- 每个线程调用多次,发送下一个请求之前的延迟, 单位为ms |
function done(summary, latency, requests)
1 | --可以用于自定义结果报表,整个过程中只执行一次 |
3. Wrk lua例子
1 | bodyArray = { |
./wrk -t 4 -c 100 -d 30s –latency –timeout 1s -s test.lua http://baidu.com
使用上面lua脚本可以使用POST请求, 并且随机选择body中json信息, 输出response信息