wrk中的lua腳本(轉)


  轉載地址:http://www.tuicool.com/articles/IFjIJjU

  wrk是一款現代化的http壓測工具,提供lua腳本的功能可以滿足每個請求或部分請求的差異化。

wrk中執行http請求的時候,調用lua分為3個階段,setup,running,done,每個wrk線程中都有獨立的腳本環境。

wrk的全局屬性

wrk = {
  scheme  = "http",
  host    = "localhost",
  port    = nil,
  method  = "GET",
  path    = "/",
  headers = {},
  body    = nil,
  thread  = <userdata>,
}

 

wrk的全局方法

-- 生成整個request的string,例如:返回
-- GET / HTTP/1.1
-- Host: tool.lu
function wrk.format(method, path, headers, body)

-- 獲取域名的IP和端口,返回table,例如:返回 `{127.0.0.1:80}`
function wrk.lookup(host, service)

-- 判斷addr是否能連接,例如:`127.0.0.1:80`,返回 true 或 false
function wrk.connect(addr)

 

Setup階段

setup是在線程創建之后,啟動之前。

function setup(thread)

-- thread提供了1個屬性,3個方法
-- thread.addr 設置請求需要打到的ip
-- thread:get(name) 獲取線程全局變量
-- thread:set(name, value) 設置線程全局變量
-- thread:stop() 終止線程

 

Running階段

function init(args)
-- 每個線程僅調用1次,args 用於獲取命令行中傳入的參數, 例如 --env=pre

function delay()
-- 每個線程調用多次,發送下一個請求之前的延遲, 單位為ms

function request()
-- 每個線程調用多次,返回http請求

function response(status, headers, body)
-- 每個線程調用多次,返回http響應

 

Done階段

可以用於自定義結果報表,整個過程中只執行一次

function done(summary, latency, requests)


latency.min              -- minimum value seen
latency.max              -- maximum value seen
latency.mean             -- average value seen
latency.stdev            -- standard deviation
latency:percentile(99.0) -- 99th percentile value
latency(i)               -- raw value and count

summary = {
  duration = N,  -- run duration in microseconds
  requests = N,  -- total completed requests
  bytes    = N,  -- total bytes received
  errors   = {
    connect = N, -- total socket connection errors
    read    = N, -- total socket read errors
    write   = N, -- total socket write errors
    status  = N, -- total HTTP status codes > 399
    timeout = N  -- total request timeouts
  }
}

 

例子

表單的提交

wrk.method = "POST"
wrk.body = "" -- 直接寫死,如果不需要請求數據的差異化
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

-- 如果要實現每次都不一樣的表單內容
local queries = {
    "language=php",
    "language=java",
    "language=lua"
}
local i = 0
request = function()
    local body = wrk.format(nil, nil, nil, queries[i % #queries + 1])
    i = i + 1
    return body
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM