wrk 压力测试工具的简单小结。 项目地址:https://github.com/wg/wrk
安装 #
Win: https://github.com/wg/wrk/wiki/Installing-wrk-on-Windows-10
Linux: https://github.com/wg/wrk/wiki/Installing-wrk-on-Linux
MacOS: brew install wrk
基本命令 #
➜ ~ wrk
Usage: wrk <options> <url>
Options:
-c, --connections <N> 连接数
-d, --duration <T> 持续时间
-t, --threads <N> 线程数
-s, --script <S> 制定lua脚本
-H, --header <H> 添加请求头
--latency 打印延迟分布信息
--timeout <T> 设置请求超时
-v, --version 打印版本信息
<N>表示数字参数,支持国际单位 (1k, 1M, 1G)
<T>表示时间参数,支持国际单位 (2s, 2m, 2h)
简单使用及解释 #
wrk -t1 -d20s -c10 -s post.lua http://api.example.com/fake/post
以单线程 保持10个连接 持续20秒 运行post.lua脚本访问http://api.example.com/fake/post
报告分析 #
如下是一个简单的性能测试报告
Running 10s test @ http://api.example.com/vioce/url
1 threads and 1 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.71s 98.25ms 1.85s 75.00%
Req/Sec 0.00 0.00 0.00 100.00%
5 requests in 10.04s, 1.55KB read
Socket errors: connect 0, read 0, write 0, timeout 1
Requests/sec: 0.50 //QPS
Transfer/sec: 157.88B //每秒处理数据
编写lua脚本实现post请求 #
-- wrk 全局变量,改动之后会影响所有的请求
wrk = {
scheme = "http",
host = "localhost",
port = nil,
method = "GET",
path = "/",
headers = {},
body = nil,
thread = <userdata>,
}
json格式 #
对于json格式数据发情post请求也是很简单的
-- filename: post.json.lua
-- 设置请求方式
wrk.method = "POST"
-- json string
wrk.body = '{"key1": "val1", "key2": "val2"}'
-- 设置content-type
wrk.headers["Content-Type"] = "application/json"
使用post.json.lua
脚本:
wrk -t4 -d1m -c10 -s post.json.lua http://api.example.com/fake/post/json
上传文件 #
实现上传文件测试,与json类似,也是设置wrk.body
和wrk.headers
, 只是body较麻烦一些
wrk.method = "POST"
wrk.headers["Content-Type"] = "multipart/form-data;boundary=------WebKitFormBoundaryX3bY6PBMcxB1vCan"
file = io.open("path/to/fake.jpg", "rb")
-- 拼装form-data
form = "------WebKitFormBoundaryX3bY6PBMcxB1vCan\r\n"
form = form .. "Content-Disposition: form-data; name="file"; filename="fake.jpg"\r\n"
form = form .. "Content-Type: image/jpeg\r\n\r\n"
form = form .. file:read("*a")
form = form .. "\r\n------WebKitFormBoundaryX3bY6PBMcxB1vCan--"
wrk.body = form
定制化wrk #
定制参考: https://github.com/wg/wrk/blob/master/SCRIPTING
未完待续