zoukankan      html  css  js  c++  java
  • 【转】wrk 压力测试的 lua脚本

    转载:https://blog.csdn.net/qq_32373277/article/details/89453681

    用 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, "
    ") -- 打印请求方式(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".."
    ")
        io.write("Requests:        "..summary.requests.."
    ")
        io.write("Avg RT:          "..string.format("%.2f",latency.mean / 1000).."ms".."
    ")
        io.write("Max RT:          "..(latency.max / 1000).."ms".."
    ")
        io.write("Min RT:          "..(latency.min / 1000).."ms".."
    ")
        io.write("Error requests:  "..errors.."
    ")
        io.write("Valid requests:  "..valid.."
    ")
        io.write("QPS:             "..string.format("%.2f",valid / durations).."
    ")
        io.write("--------------------------
    ")
      
    end

    脚本就这么完事了,开始压测吧!

    wrk -t1 -c1000 -d30s -T10s -s category.lua --latency https://shop-api-crs.chi.com  
    
    -t 开启多少线程
    -c 连接数量 
    -T 超时时间(timeout),支持时间单位 (s, m, h)
    -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

    转载:https://blog.csdn.net/qq_32373277/article/details/89453681

     
     

    转载:https://blog.csdn.net/qq_32373277/article/details/89453681

  • 相关阅读:
    去掉Win10中的“此电脑”中的6个默认文件夹的方法
    Fastboot驱动及安装
    Fastboot驱动及安装
    JNI+NDK编程总结
    JNI+NDK编程总结
    20194742自动生成四则运算题第一版报告
    读构建之法现代软件工程随笔
    想法或创意
    ubuntu控制台乱码
    Java 为什么不支持多继承?
  • 原文地址:https://www.cnblogs.com/day1day1up/p/15392087.html
Copyright © 2011-2022 走看看