lua - wrk 执行 Lua 脚本

标签 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”?

抱歉,我实际上只看了几个小时的 Lua。

谢谢

最佳答案

当你做的时候

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

关于lua - wrk 执行 Lua 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46236165/

相关文章:

ruby - wrk 在 Rack vs Sinatra 基准测试中显示奇怪的结果

rest - 有没有办法使用 wrk 将参数传递给 GET 请求?

benchmarking - 与wrk一起发布请求?

list - 在Lua中从未知数量的列表中递归地构建一个表

lua - Lua 中的 n 位模式匹配

variables - 如何将空变量传递给Lua中的函数

lua - 将所有内容保存在单个 lua 字节码 block 中?

lua - 意外的 lua 模式匹配结果