【问题标题】:wrk with lua script - generating multiple POST requests with different bodywrk with lua script - 使用不同的主体生成多个 POST 请求
【发布时间】:2021-09-28 14:52:18
【问题描述】:

我为 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"

【问题讨论】:

  • 这段代码只创建一个带有随机用户名的请求。如果您在创建多个请求时遇到问题,您应该向我们展示您是如何做到的
  • 嗨,我从命令行运行它:wrk -t1 -c3 -d10s https://endpoint -s filenamewithscript.lua

标签: lua wrk


【解决方案1】:

我不熟悉wrk。

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

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

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

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

function request()
   requests = requests + 1
   return wrk.request()
end

【讨论】:

  • 在那一秒内 - 是的,但如果我运行 10 秒的测试,我应该能够看到生成的不同值,但它一直只显示第一个值。让我们等待也许有 WRK 经验的人能够提供帮助。谢谢
  • 查看编辑。我建议您再次阅读脚本示例。
【解决方案2】:

试试这样的。它应该执行 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

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2013-06-25
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多