我有一个包含多个场景的 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
访问数据,甚至为此向数据文件添加了一个空列表,但仍然是混合的。
如何分离每个场景的数据而不使它们混合?
如果你只是想“分离”不同场景的数据,请引入另一个嵌套级别:
{
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
模块中的不同属性。