0

我为 wrk 编写了一些 lua 脚本来生成多个 POST 请求。我的问题是我的脚本仅适用于第一个请求。所有进一步生成的请求都与第一个请求完全相同。我希望为每个 POST 请求生成新的用户变量:

lowerCase = "abcdefghijklmnopqrstuvwxyz" 
characterSet = lowerCase
   
keyLength = 13
user = ""    
math.randomseed(os.time())
for i = 1, keyLength do
rand = math.random(#characterSet)
user = user .. string.sub(characterSet, rand, rand )
end


wrk.path  = "/somepath"
wrk.method = "POST"
wrk.body   = [[{"username":"]].. user .. [[,"password":"somepassword"}]]
wrk.headers["Content-Type"] = "application/json"
4

2 回答 2

1

尝试这样的事情。它应该执行 request3 ~50% 的时间,另外两个 ~25% 的时间。干杯!

names = { "Maverick", "Goose", "Viper", "Iceman", "Merlin", "Sundown", "Cougar", "Hollywood", "Wolfman", "Jester" }

request1 = function()
    headers = {}
    headers["Content-Type"] = "application/json"
    body = '{"name": ' .. names[math.random(#names)] .. '}'
    return wrk.format("POST", "/test1", headers, body)
end

request2 = function()
    headers = {}
    headers["Content-Type"] = "application/json"
    body = '{"name": ' .. names[math.random(#names)] .. '}'
    return wrk.format("POST", "/test2", headers, body)
end

request3 = function()
    headers = {}
    headers["Content-Type"] = "application/json"
    body = '{"name": ' .. names[math.random(#names)] .. '}'
    return wrk.format("GET", "/test3", headers, body)
end

requests = {}
requests[0] = request1
requests[1] = request2
requests[2] = request3
requests[3] = request3

request = function()
    return requests[math.random(0, 3)]()
end

response = function(status, headers, body)
    if status ~= 200 then
        io.write("------------------------------\n")
        io.write("Response with status: ".. status .."\n")
        io.write("------------------------------\n")
        io.write("[response] Body:\n")
        io.write(body .. "\n")
    end
end
于 2021-07-30T21:06:12.243 回答
0

我对 wrk 不熟悉。

我猜你在一秒钟内多次运行该代码。与os.time第二个精度一样,您将在该秒内拥有相同的随机种子,因此具有相同的用户名。

通过查看脚本示例,我会说脚本只评估一次,或者每个线程可能只评估一次。这些示例实现了将由 wrk 调用的函数。为每个请求定义这些函数是没有意义的。

在脚本中添加打印以确保。

这是一个计算请求的示例。您可能可以将代码放入该函数中

function request()
   requests = requests + 1
   return wrk.request()
end
于 2021-07-21T08:39:37.823 回答