用 lua脚本同时GET,POST
压测
category.lua 脚本如下:
urimap = {
"/v3/goods/detail",
"/v3/goods/status",
"/v3/goods/sku_detail",
"/v3/coupons/lists",
"/v3/pages/recommend",
"/v3/carts",
}
methodmap = {
"POST",
"POST",
"POST",
"GET",
"GET",
"GET",
}
params = {
[[{"id":2}]],
[[{"spu_id":2,"type":1}]],
[[{"id":2,"sku_id":7}]], -- 双中括号里面不转译
"page=1&size=100",
"",
"",
}
math.randomseed(os.time())
init = function()
local r = {}
local path = "" -- 局部变量(不加local 是全局变量)
local method = "get" -- 默认get
-- header 头
wrk.headers["Hash"]= "85280aa135bbd0108dd6aa424565a"
wrk.headers["Token"]= ""
for i, v in ipairs(urimap) do -- 键从1 开始 非 0
path = v -- 路径
method = methodmap[i] -- method
if method == "POST" then
wrk.headers["content-type"]= "application/json" --POST 参数json格式
wrk.body = params[i]
end
if method == "GET" and params[i] ~= "" then
path = v .. "?" ..params[i]
end
io.write(method, "---", params[i], "----", path, "\n") -- 打印请求方式(1个线程会打印一次),参数,路径(不含域名)
r[i] = wrk.format(method, path)
end
req = table.concat(r)
end
request = function()
return req
end
response = function(status, headers, body)
if status ~= 200 then
print("status:", status)
print("error:", body)
wrk.thread:stop()
else
-- print("body:", body)
end
end
done = function(summary, latency, requests)
local durations=summary.duration / 1000000 -- 执行时间,单位是秒
local errors=summary.errors.status -- http status不是200,300开头的
local requests=summary.requests -- 总的请求数
local valid=requests-errors -- 有效请求数=总请求数-error请求数
io.write("Durations: "..string.format("%.2f",durations).."s".."\n")
io.write("Requests: "..summary.requests.."\n")
io.write("Avg RT: "..string.format("%.2f",latency.mean / 1000).."ms".."\n")
io.write("Max RT: "..(latency.max / 1000).."ms".."\n")
io.write("Min RT: "..(latency.min / 1000).."ms".."\n")
io.write("Error requests: "..errors.."\n")
io.write("Valid requests: "..valid.."\n")
io.write("QPS: "..string.format("%.2f",valid / durations).."\n")
io.write("--------------------------\n")
end
脚本就这么完事了,开始压测吧!
wrk -t1 -c1000 -d30s -T10s -s category.lua --latency https://shop-api-crs.chi.com
-t 开启多少线程
-c 连接数量
-T 时间参数,支持时间单位 (2s, 2m, 2h)
-s Lua脚本路径
--latency 压测结束完,打印统计信息
返回:
Running 15s test @ https://shop-api-crs.chi.com
1 threads and 10 connections.
Thread Stats Avg Stdev Max +/- Stdev
Latency 124.50ms 173.08ms 1.11s 47.38%
Req/Sec 252.53 111.40 363.00 79.86%
Latency Distribution
50% 381.93ms
75% 0.00us
90% 0.00us
99% 0.00us
3674 requests in 15.08s, 2.51MB read --(15.08秒内共处理完成了 3674个请求,读取了2.51MB数据)
Requests/sec: 243.56 -- (平均每秒处理完成请求)
Transfer/sec: 170.29KB -- (平均每秒读取数据)
Durations: 15.08s -- 执行时间,单位是秒
Requests: 3674 -- 总的请求数
Avg RT: 124.50ms --平均值
Max RT: 1110.714ms -- 最大值
Min RT: 78.324ms -- 最小值
Error requests: 0 -- Error请求数
Valid requests: 3674 -- 有效请求数
QPS: 243.56 --QPS