使用wrk测试一系列请求



我目前正试图对一个web应用程序进行压力测试,该应用程序允许使用wrk进行简单的用户登录、注销和其他功能,但我真的很难正确编写一个允许我将多个请求链接在一起的脚本。

例如,我想写一个脚本,随机地让传入线程执行以下操作之一:

1.

  • 登录
  • 注销
  • 登录
  • 执行函数A
  • 注销
  • 登录
  • 执行函数B
  • 注销

应用程序使用基于表单的身份验证并维护会话。目前,我甚至不知道如何对应用程序所理解的我的/login路由进行正确的发布请求,以便wrk线程正确地向应用程序中的表单填写用户名和密码。该应用程序在浏览器中可以正常工作,但我一直在努力让它在wrk脚本中工作。目前我已经尝试过类似的东西:

function request_0 ()
headers = {}
headers["Content-Type"] = "multipart/form-data"
local body  = '{"username": "user0", "password": "pass0"}'
return wrk.format("POST", "/login", headers, body)
end
function request_1 ()
headers = {}
headers["Content-Type"] = "multipart/form-data"
local body  = '{"username": "user1", "password": "pass1"}'
return wrk.format("POST", "/login", headers, body)
end
requests = {}
requests[0] = request_0
requests[1] = request_1
request = function()
return requests[math.random(0,1)]()
end

至少模拟多个可能的传入请求,但我的应用程序没有注册给定的用户名或密码。如果有人能就请求的正确语法、如何将多个请求链接在一起以及如何处理身份验证提供帮助,我们将不胜感激。

我对Lua几乎一无所知,但对于链接+身份验证,请将其作为一个简单的示例:https://github.com/wg/wrk/blob/master/scripts/auth.lua

此外,对于body,请尝试将JSON用双方括号括起来,而不是用单引号括起来。。。像这样:[[{"key": "value"}]]

不过,对于复杂的场景,我建议您查看Gatling。以下是一个示例:https://www.youtube.com/watch?v=3txt29cG3VM

最新更新