0

使用 Taurus 测试登录操作

execution:
  -
    concurrency: 5
    ramp-up: 5
    hold-for: 1m
    scenario: Buyer-logs-in


scenarios:
  Buyer-logs-in:
    variables:
      baseurl: http://localhost:3000
    default-address: ${baseurl}
    data-sources:
      - path: './login.csv'
        delimeter: ','
        variable-names: userName, password
    keepalive: true
    retrieve-resources: false

    requests:
      - url: 'http://localhost:3000/login'
        label: login
        method: POST
        body:
          user[email]: {userName}
          user[password]:  {password}
        assert:
          - contains:
              - 200
            subject: http-code

      - url: 'http://localhost:3000/action'
        label: page1
        method: GET
        assert:
          - contains:
              - 200
            subject: http-code 

这是我的示例 Taurus 代码,用于模拟登录和测量性能。

  1. 在我的应用程序中,一次只能有一个用户登录,而我的 csv 文件有 2 个用户。当我将并发设置为 5 并且 Taurus 说有 5 个用户登录时,测试仍然有效。这怎么可能。当同一个用户再次登录时,他将被踢出他登录的第一个浏览器。那么在2个用户登录的情况下,Tuarus如何模拟5个用户?

  2. 有了这个问题,taurus 真的使用我在 csv 文件中提供的凭据登录吗?或者我应该使用 selenium/Taurus 来模拟它?

  3. 真正让我感到困惑的是,当我删除 csv 文件中的所有用户时,测试仍然没有给我 200 的登录名和 page1。

TIA

4

1 回答 1

2

如果您不指定executorTaurus 将jmeter用作默认值,则意味着您的 YAML 配置将被转换为Apache JMeter测试计划

可以通过运行bzt your-test.yaml -gui命令查看生成的测试计划

  1. data-sources转换为CSV 数据集配置,如下所示:

    在此处输入图像描述

    这意味着每个线程(虚拟用户)每次迭代都会从 CSV 文件中获取新值,例如:

    • 虚拟用户 1 - 迭代 1 - 第一行
    • 虚拟用户 2 - 迭代 1 - 第 2 行
    • 虚拟用户 3 - 迭代 1 - 第一行
    • 虚拟用户 1 - 迭代 2 - 第 2 行
    • 等等
  2. 我不这么认为,您正在从 CSV 文件中读取凭据,但没有在任何地方使用它,JMeter 变量的正确语法是${variable_name_here},因此您需要将登录请求正文设置为:

    user[email]: ${userName}
    user[password]:  ${password}
    

    只要您正确配置 JMeter 使其表现得像真正的浏览器,就不需要使用 Selenium

  3. 您可能会得到误报结果,因为您的Response Assertion 没有做很多有用的工作,JMeter 会自动将HTTP 状态代码低​​于 400 视为成功。因此,我宁愿建议验证用户是否已登录,而不是检查状态代码,即“欢迎”消息是否存在或 API 响应有一些成功登录的特定文本和/或不包含错误。

于 2019-10-24T05:19:00.323 回答