负载测试记录在凤凰城的路线

时间:2017-06-08 14:40:35

标签: elixir phoenix-framework load-testing

我正在尝试对需要登录的路由进行负载测试。

我之前使用https://artillery.io/docs/index.html用于已注销的路线,但工作正常。对于已登录的路由,我尝试使用函数调用beforeRequest来设置请求标头和放大器。体。

config: target: "https://www.mywebsite.com/" phases: - duration: 60 arrivalRate: 50 processor: "test.js" scenarios: - flow: - post: url: "/login" beforeRequest: "setReqBody"

我的beforeRequest看起来像这样:

function setReqBody(requestParams, context, ee, next) { requestParams.body = {'email': 'user@mail.com', 'password': 'password', '_csrf_token': window.csrfToken} return next(); }

我收到window未定义的错误。

我环顾四周,看看是否还有其他我可以用来负载测试凤凰,但没有太多运气。有没有其他方式我可以登录&测试那些路线?或者我可以使用其他依赖项/库来执行此操作?

2 个答案:

答案 0 :(得分:2)

问题是window未在beforeRequest函数运行的上下文中定义(因为代码未在浏览器中运行)。

如果CSRF令牌包含在登录页面的DOM / HTML中的某个位置,您可以先抓取它然后将其包含在POST请求中。例如,如果登录表单包含一个隐藏的输入,其中包含name attribute = csrfToken的CSRF令牌:

scenarios:
  - flow:

    # Get the login page and grab the CSRF token
    - get:
        url: "/login"
        capture:
          selector: "input[name='csrf_token']"
          attr: "value"
          as: "csrfToken"

    # Useful for debugging: check that we used the right selector:
    - log: "Extracted CSRF token: {{ csrfToken }}"

    # Now send a login request:
    - post:
        url: "/login"
        form:
          email: "user@mail.com"
          password: "password123"
          _csrf_token: "{{ csrfToken }}"

    # The session cookie will be remembered and reused automatically by
    # Artillery from this point onwards.

答案 1 :(得分:1)

考虑使用https://gist.github.com/anonymous/b651408a8419f13a949d719e6b87d8ea,它有:

有关详细信息,请参阅HTML Reporting Dashboard