Artillery.io:如何为每种情况生成测试报告?

时间:2019-07-08 14:16:13

标签: node.js artillery

火炮:如何按顺序运行方案并在同一文件中显示每个方案的结果?

我目前正在用artillery.io编写nodejs测试,以比较我实现的两个端点之间的性能。我定义了两个方案,我希望在同一报告文件中获得每个方案的结果。 测试的执行不是顺序执行的,这意味着在测试结束时,我的结果已经合并,无法知道每个测试的性能,但是对于所有测试而言都是如此。

config:
  target: "http://localhost:8080/api/v1"
  plugins:
    expect: {}
    metrics-by-endpoint: {}
  phases:
    - duration: 60
      arrivalRate: 2
  environments:
    dev:
      target: "https://backend.com/api/v1"
      phases:
        - duration: 60
          arrivalRate: 2
scenarios:
  - name: "Nashhorn"
    flow:
      - post:
          url: "/casting/nashhorn"
          auth:
            user: user1
            pass: user1
          json:
            body:
              fromFile: "./casting-dataset-01-as-input.json"
              options:
                filename: "casting_dataset"
                conentType: "application/json"
          expect:
            statusCode: 200
          capture:
            regexp: '[^]*'
            as: 'result'
      - log: 'result= {{result}}'

  - name: "Nodejs"
    flow:
      - post:
          url: "/casting/nodejs"
          auth:
            user: user1
            pass: user1
          json:
            body:
              fromFile: "./casting-dataset-01-as-input.json"
              options:
                filename: "casting_dataset"
                conentType: "application/json"
          expect:
            statusCode: 200
          capture:
            regexp: '[^]*'
            as: 'result'
      - log: 'result= {{result}}'

如何顺序运行方案并在同一文件中显示每个方案的结果?

预先感谢您的回答

3 个答案:

答案 0 :(得分:1)

据我所知,使用现有的炮兵逻辑没有什么好的方法可以做到这一点。

使用这个测试脚本:

scenarios:
   - name: "test 1"
     flow:
     - post:
       url: "/postman-echo.com/get?test=123"
       weight: 1
  - name: "test 2"
    flow:
    - post:
      url: "/postman-echo.com/get?test=123"
      weight: 1
... etc...


Started phase 0 (equal weight), duration: 1s @ 13:21:54(-0500) 2021-01-06
Report @ 13:21:55(-0500) 2021-01-06
Elapsed time: 1 second
  Scenarios launched:  20
  Scenarios completed: 20
  Requests completed:  20
  Mean response/sec: 14.18
  Response time (msec):
    min: 117.2
    max: 146.1
    median: 128.6
    p95: 144.5
    p99: 146.1
  Codes:
    404: 20

All virtual users finished
Summary report @ 13:21:55(-0500) 2021-01-06
  Scenarios launched:  20
  Scenarios completed: 20
  Requests completed:  20
  Mean response/sec: 14.18
  Response time (msec):
    min: 117.2
    max: 146.1
    median: 128.6
    p95: 144.5
    p99: 146.1
  Scenario counts:
    test 7: 4 (20%)
    test 5: 2 (10%)
    test 3: 1 (5%)
    test 1: 4 (20%)
    test 9: 2 (10%)
    test 8: 3 (15%)
    test 10: 2 (10%)
    test 4: 1 (5%)
    test 6: 1 (5%)
  Codes:
    404: 20

所以基本上你可以看到它们的权重相等,但运行情况不同。所以我认为需要在代码本身中为大炮添加一些东西。很高兴在这里犯错。

答案 1 :(得分:0)

我认为您错过了参数weight,该参数定义了执行场景的可能性。如果您在第一种情况下将权重设置为1,在第二种情况下将权重设置为相同,则两者执行的可能性相同(50%)。

如果您在第一个方案中将weight设置为3,在第二个方案中将weight设置为1,则第二个方案的执行概率为25%,而第一个方案的执行概率为25%。被执行的可能性为75%。

将其与arrivalRate参数结合并将rampTo的值设置为2,将导致每秒执行2个方案,其中,如果将两个方案的权重设置为1,它们将同时执行。

documentation

中查找方案权重
scenarios:
  - flow:
       - log: Scenario for GET requests
       - get: 
            url: /v1/url_test_1
        name: Scenario for GET requests
        weight: 1
  - flow:
       - log: Scenario for POST requets
       - post:
             json: {}
             url: /v1/url_test_2
        name: Scenario for POST
        weight: 1

希望这对您有所帮助。

答案 2 :(得分:0)

您可以使用每个端点指标插件为您提供每个端点的结果,而不是聚合结果。

https://artillery.io/docs/guides/plugins/plugin-metrics-by-endpoint.html

我看到您的配置中已经有了这个,但是如果它没有提供您需要的东西,它就无法工作。您是否安装并添加到配置中?

npm install artillery-plugin-metrics-by-endpoint

就顺序运行而言,我不确定您为什么要这样做,但假设您这样做,您只需将每个 POST 定义为同一场景的一部分,而不是 2 个不同的场景。这样第二步只会在第一步响应后执行。我相信该插件是针对每个端点的,而不是针对每个场景的,因此仍会为您提供所需的报告。