2017-09-15 31 views
1

我的问题是,当我运行WRK执行Lua中

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几个小时。

感谢

+0

现在用'数=的Math.random替换'数= math.random'()'否则所有'number's将是相同的值(以及所有不会是一个数字) –

+0

是的感谢有数字= math.random(math.randomseed(os.time())) – dawson

+0

'math.randomseed(os.time())'只能执行一次! –

回答

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 
+0

嗨,是的,我意识到,当我打印出价值时,现在在问题中改变了。我的问题更多的是可能的是,在'wrk'命令执行期间,它会不断重新执行生成的脚本并每次插入不同的值? – dawson

+0

值取决于种子。由于它是一个简短的脚本,因此系统时间可能不足以在运行之间更改,因此每次运行脚本时都会得到相同的种子(因此具有相同的“随机”数字)。你只需要找到一个随机种子的不同来源。尝试阅读/ dev/urandom中的内容。 –

+0

好的,谢谢你会的。 – dawson