2017-06-08 91 views
5

我想做適用於需要登錄路由的負載測試。負載測試登錄航線鳳凰

我以前使用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': '[email protected]', 'password': 'password', '_csrf_token': window.csrfToken} return next(); }

我得到一個錯誤,window是不確定的。

我環顧四周,看看有沒有其他的東西可以用來負載測試鳳凰,但沒有太多的運氣。有沒有其他辦法可以登錄&測試那些路線?或者我可以使用其他依賴項/庫來執行此操作?

+0

它可能是值得一問@ hassy-veldstra(炮兵的創建者)直接在此幫助... – nelsonic

回答

2

問題是window沒有在beforeRequest函數運行的上下文中定義(因爲代碼沒有在瀏覽器中運行)。

如果CSRF令牌包含在登錄頁面的DOM/HTML中的某處,您可以先抓住它,然後將其包含在POST請求中。例如,如果登錄表單必須包含CSRF令牌的隱藏輸入與name屬性= csrfToken

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: "[email protected]" 
      password: "password123" 
      _csrf_token: "{{ csrfToken }}" 

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