2017-09-15 92 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