WRK的使用-lua脚本POST请求(静态数据)

Posted blog12357

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WRK的使用-lua脚本POST请求(静态数据)相关的知识,希望对你有一定的参考价值。

HTTP_prot =

       "/gateway/services",

    "/gateway/services",

    

 

--接口类型

HTTP_type =

    "POST",

       "POST",

 

 

 

 

--参数

HTTP_body =

 

       ‘"phone": "19012000335"‘,

    ‘"phone": "19012000335","code": "1569"‘,

       -- 双中括号里面不转译

-----------如果有多个接口,名称、类型、参数必须按照相同的顺序。

math.randomseed(os.time())

 

function changeData(tal,order)

       local body = string.format()

 

 

 

 

end

 

local reqIndex =0

numLink = 0   --记录连接数

numHTTP = 1   --记录第几个接口

numData = "19012"

lenthHTTP = 0

respError = 0   --变量,用于记录错误请求的数量

local threads =

--测试开始 执行一次

function setup(thread)

--    thread:set("id", counter)

    table.insert(threads, thread)

     reqIndex = reqIndex +1;     

       thread:set("index", reqIndex);

 

end

 

--每个线程执行一次

init = function()

 

    local r =

    local path = ""   -- 局部变量(不加local 是全局变量)

    local method = "GET" -- 默认接口类型是GET

      

    -- header 头

    -- wrk.headers["Hash"]= "85280aa135bbd0108dd6aa424565a"

    -- wrk.headers["Token"]= ""

  

    for i, v in ipairs(HTTP_prot) do -- 键从1 开始 非 0

        path = v    -- 接口路径

        method = HTTP_type[i]  -- method 获得接口类型

 

       -----根据接口类型,判断进入那个判断-------

        if method == "POST" then  --判断接口类型为“POST”

                     --POST 参数json格式

            wrk.headers["content-type"]= "application/json"

                     --POST Token参数

 

                 wrk.body = HTTP_body[i] --获得参数

        end

        if method == "GET" and  HTTP_body[i] ~= "" then --判断接口类型为“GET”,并且参数不为空

                     path = v .. "?" ..HTTP_body[i]

        end

 --       io.write(method, "---", HTTP_body[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) 

 

       --判断返回结果是否正确,如果返回结果错误则打印返回结果,进入LOG.txt文件

       if(not string.find(body,‘"code":0‘)) then

              respError = respError + 1

              file = io.open("LOG.txt","a")

              file:write(body.."\n")

              file:flush()

       end

end 

 

-- 测试最终结果,在测试结束执行

done = function(summary, latency, requests)

  local x4 = 0

  for index, thread in ipairs(threads) do

       x4 = x4 + thread:get("respError")

  end

 

 

       local durations = summary.duration / 1000000    --执行时间,单位-秒

       local errors = summary.errors.status                --http status(状态)不是200,300开头的

       local requests = summary.requests                         --总的请求数

       local valid = requests - x4                               --有效请求数 = 总的请求数 - 错误请求数

       local connect = summary.errors.connect

       local read1 = summary.errors.read

       local write1 = summary.errors.write

       local timeout = summary.errors.timeout

       local errorRate = (x4/requests)*100

       errorRate = string.format("%.1f",errorRate)

 

       io.write("+++++++++++++++++++++++++++++++++++++\n")

       io.write(" 测试持续时间: "..string.format("%.2f",durations).."s".."\n")

       io.write(" 平均响应时间: "..string.format("%.2f",latency.mean / 1000).."ms".."\n")

       io.write(" 最小响应时间: "..(latency.min / 1000).."ms".."\n")

       io.write(" 最大响应时间: "..(latency.max / 1000).."ms".."\n")

       io.write(" 全部请求数量: "..summary.requests.."\n")

       io.write(" 错误请求数量: "..x4.."\n")

       io.write(" 有效请求数量: "..valid.."\n"  )

       io.write(" 错误率: "..errorRate.."%\n")

       io.write(" 每秒查询率: "..string.format("%.2f",valid / durations).."\n"  )

       io.write("+++++++++++++++++++++++++++++++++++++\n")       

 

end

 

以上是关于WRK的使用-lua脚本POST请求(静态数据)的主要内容,如果未能解决你的问题,请参考以下文章

wrk中的lua脚本(转)

wrk安装及lua脚本进行API性能测试

wrk和lua一起做压测

wrk 现代HTTP压测工具,动态构建请求

性能测试工具 wrk 使用教程

http性能测试工具wrk源码学习之开篇