我为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"发布于 2021-07-30 21:06:12
试试这样的东西。它应该执行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-21 16:39:38
我不熟悉wrk。
我猜您在一秒钟内多次运行该代码。由于os.time具有第二个精确度,因此在第二个精确度内,您将拥有相同的随机种子,因此具有相同的用户名。
通过查看脚本示例,我会说脚本只评估一次,或者每个线程可能只评估一次。这些示例实现的函数将由wrk调用。为每个请求定义这些函数是没有意义的。
在您的脚本中添加打印以确保。
下面是一个计算请求数的示例。您可能可以将代码放入该函数中
function request()
requests = requests + 1
return wrk.request()
endhttps://stackoverflow.com/questions/68465947
复制相似问题