【问题标题】:wrk executing Lua scriptwrk 执行 Lua 脚本
【发布时间】:2018-02-24 10:40:49
【问题描述】:

我的问题是当我跑步时

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}'

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

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

谢谢

【问题讨论】:

  • number = math.random 替换为number = math.random() 否则所有numbers 将是相同的值(并且根本不是数字)
  • 是的,谢谢现在有 number = math.random(math.randomseed(os.time()))
  • math.randomseed(os.time()) 只能执行一次!
  • @EgorSkriptunoff 你如何确保它只运行一次?

标签: lua wrk


【解决方案1】:

当你这样做时

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

【讨论】:

  • 嗨,是的,我意识到当我打印出该值时,它现在在问题中是否已更改。我的问题更多是关于是否有可能在执行“wrk”命令期间它会不断重新执行脚本,每次都生成并插入不同的值?
  • 这些值取决于种子。由于它是一个简短的脚本,因此系统时间可能不够精细,无法在运行之间更改,因此每次脚本运行时您都会获得相同的种子(因此是相同的“随机”数字)。你只需要找到一个不同的随机种子来源。尝试从 /dev/urandom 读取一些内容。
  • @dawson 我刚刚用一些可能有用的东西编辑了答案
  • 似乎给出了同样的问题,执行速度超过了它可以生成的速度。用上面的代码运行了两次,第一次只插入了 16 个项目,第二次只插入了 15 个项目,然后才说它们已经存在。将进一步研究种子
  • 我发现它会在数据库中输入一些与我在 wrk 命令中设置的“-t”相同的项目,之后它会重用它们并且程序将它们捕获为已经存在在数据库中
猜你喜欢
  • 2018-12-24
  • 1970-01-01
  • 2019-10-28
  • 2013-06-24
  • 1970-01-01
  • 2018-12-28
  • 2016-07-29
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多