在多种场景下使用独特的参数化数据

问题描述 投票:0回答:1

我有一个包含多个场景的 k6 负载测试脚本。一种场景需要使用参数化的唯一数据。为了简化,一种场景模拟数据(匿名)查看者的加载,而另一种场景模拟登录用户更新插入数据。

我在从登录用户场景的 json 中正确获取参数化数据时遇到问题。如果我只运行这个场景,一切正常,但是一旦添加查看场景,索引就会失败。

我的参数化数据就像

{
  ddd: [
    {a: 1, b: 2},
    {a: 3, b: 4}
  ]
}

在脚本中,我首先在初始化阶段使用 SharedArray 来访问它:

const ddd = new SharedArray(
  'ddd',
  () => JSON.parse(open('./data.json')).ddd
);

稍后在测试中功能为

const d = ddd[vu.idInTest - 1];

添加第二个场景后,索引会混合,第二个场景会获取数据。我想这是有道理的,因为 VU ID 在场景之间共享。

我尝试过

scenario.iterationInTest
访问数据,甚至为此向数据文件添加了一个空列表,但仍然是混合的。

如何分离每个场景的数据而不使它们混合?

k6
1个回答
1
投票

如果你只是想“分离”不同场景的数据,请引入另一个嵌套级别:

{
  ddd: [
    {
      scenario1: [
        {a: 1, b: 2},
        {a: 3, b: 4}
      ],
      scenario2: [
        ...
      ]
    }
  ]
}

在您的测试函数中,您将访问相应的场景数据:

const d = ddd[0].scenario1[vu.idInTest - 1];

(并且可以使用模运算符不读取超出数组末尾的内容:

ddd[0].scenario1[(vu.idInTest - 1) % ddd[0].scenario1.length]
)。

根据您想要如何为每个 VU 或每次迭代选择数据,您可能需要使用

k6/execution
模块中的不同属性。

© www.soinside.com 2019 - 2024. All rights reserved.