如何在artillery.io请求中传递登录参数

时间:2019-10-22 23:56:22

标签: artillery

我已经开始使用'Artillery.io进行负载测试。这里介绍如何在email, password中传递认证参数,例如load-test.yml,下面在发送请求时抛出了401一个未经授权的错误。有人可以指导我如何传递诸如email and password

这样的身份验证参数
config:
  target: 'https://test-url.com'
  phases:
    - duration: 70
      arrivalRate: 10
  defaults:
    headers:
      Content-Type: application/json

scenarios:
  - flow:
    - get:
        url: /findAMembership
        headers:
          Content-Type: application/json
    - post:
        url: /auth
        body:  '{"username":"test@test.com", "password": "some_testpassword"}'
        headers:
          Content-Type: application/json

2 个答案:

答案 0 :(得分:0)

与脚本有关的事情使阅读,故障排除甚至解决问题变得更加容易。

首先,关于401问题,我认为您的请求不符合身份验证端点要求。请检查端点。 (例如如何正常使用auth?)

我假设端点接受json请求(usernamepassword)并响应Bearer token,您可以尝试使用此方法(改用json body,并定义key-value):

- post:
    url: "/auth"
    json:
      username: "test@test.com"
      password: "some_testpassword"
    headers:
      Content-Type: "application/json" # no need this, you have specified the default Content-Type
    capture:
      json: "$.token"
      as: "token" # Should have this, read below

还有一条便条,您发送了一个auth请求,但没有捕获任何请求,这没有任何意义。记住要捕获响应(例如Bearer token等)以链接需要身份验证的请求。 Read more

答案 1 :(得分:0)

如果要从文件读取用户,则可以指定有效负载路径及其字段。这也使您能够测试有多个用户和/或失败尝试的方案。

config:
  target: "<TARGET>"
  payload:
    - path: "./users.csv"
      fields:
        - "username"
        - "password"
      order: sequence
      skipHeader: true
    - path: "./products.csv"
      fields:
        - "id"
      order: sequence
      skipHeader: true
  phases:
    - duration: 60
      arrivalRate: 20
scenarios:
  - flow:
    - post:
        url: "/login"
        json:
          username: "{{ username }}"
          password: "{{ password }}"

通过这种方式,用户名和密码将从指定的CSV文件中读取,并通过json主体对象POST<TARGET>/login端点

{ 
  username: <READ USERNAME>
  password: <READ PASSWORD>
}

一个示例CSV文件可能看起来像

username,password
some1@example.com,super1
email@example.com,secret