火炮:如何按顺序运行方案并在同一文件中显示每个方案的结果?
我目前正在用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}}'
如何顺序运行方案并在同一文件中显示每个方案的结果?
预先感谢您的回答
答案 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,它们将同时执行。
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 个不同的场景。这样第二步只会在第一步响应后执行。我相信该插件是针对每个端点的,而不是针对每个场景的,因此仍会为您提供所需的报告。