3

Artillery:如何按顺序运行场景并将每个场景的结果显示在同一个文件中?

我目前正在编写 nodejs 测试artillery.io来比较我实现的两个端点之间的性能。我定义了两个场景,我想在同一个报告文件中获得每个场景的结果。测试的执行不是顺序的,这意味着在测试结束时我已经组合了一个结果,不可能知道每个测试的性能,但只能知道所有测试的性能。

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}}'

如何按顺序运行场景并将每个场景的结果显示在同一个文件中?

预先感谢您的回答

4

3 回答 3

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

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

于 2021-01-06T18:32:24.223 回答
1

我想你错过了 param weight,这个 param 定义了执行场景的概率。如果在第一个场景中将权重设为 1,而在第二个场景中放置相同的值,则两者的执行概率相同(50%)。

如果您将第一个场景 aweight设置为 3,将第二个场景 a 设置weight为 1,则第二个场景将有 25% 的执行概率,而第一个场景将有 75% 的执行概率。

结合arrivalRate参数设置rampTo为2,每秒会执行2个场景,如果给这两个场景设置权重为1,它们会同时执行。

文档中查找场景权重

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

我希望这可以帮助你。

于 2020-04-23T07:28:11.843 回答
0

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

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

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

npm install artillery-plugin-metrics-by-endpoint

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

于 2021-03-16T08:55:02.917 回答