zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    数组索引,内容交换
    查找两个等长升序线性表的中位数
    MarkDown使用小结
    java元注解
    LeetCode OJ:Valid Number
    LeetCode OJ:Insert Interval
    关于博客的格式
    9.Hive Metastore Administration
    3.控制hive map reduce个数
    6.capacity scheduler
  • 原文地址:https://www.cnblogs.com/rainy-shurun/p/5873239.html
Copyright © 2011-2022 走看看