wrk执行Lua脚本

时间:2017-09-15 09:24:43

标签: lua wrk

我的问题是,当我跑

wrk -d10s -t20 -c20 -s /mnt/c/xxxx/post.lua http://localhost:xxxx/post

只执行一次的Lua脚本?它只会将一个项目放入URL的数据库中。

-- example HTTP POST script which demonstrates setting the
-- HTTP method, body, and adding a header
math.randomseed(os.time())
number =  math.random()
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"        
wrk.body = '{"name": "' .. tostring(number) .. '", "title":"test","enabled":true,"defaultValue":false}'

有没有办法让它动态创建'number'变量并继续将新项添加到数据库中,直到'wrk'命令完成测试为止?或者它会在测试期间继续执行脚本,并在'wrk.body'中插入新的'number'变量?

道歉我实际上只是在看Lua几个小时。

由于

1 个答案:

答案 0 :(得分:0)

当你这样做时

number = math.random

您没有将number设置为随机数,而是将其设置为等于函数math.random。要将变量设置为函数返回的值,该行应为

number = math.random()

您可能还需要设置随机种子(使用math.randomseed()函数和您选择的适当变量参数 - 系统时间很常见)以避免math.random()在每次脚本时给出相同的结果运行。这应该在第一次调用math.random之前完成。

由于脚本很短,系统时间可能不是这里种子的好选择(脚本运行得比os.time()更改的值快得多,因此在紧接着运行它几次之后会给出相同的效果结果每次)。从/ dev / urandom中读取几个字节应该会得到更好的结果。

您也可以直接使用/ dev / urandom来生成数字,而不是将其作为种子提供给math.random。如下面的代码所示,取自this answer。这不是一个安全的随机数生成器,但为了您的目的,它会没事的。

urand = assert (io.open ('/dev/urandom', 'rb'))
rand  = assert (io.open ('/dev/random', 'rb'))

function RNG (b, m, r)
  b = b or 4
  m = m or 256
  r = r or urand
  local n, s = 0, r:read (b)

  for i = 1, s:len () do
    n = m * n + s:byte (i)
  end

  return n
end