问题描述
我希望将每个 VU 分配给从现有数组中获得的先前已知的 id
,并且该 VU 在创建 VU 时仅执行一次 default
函数中的指令。>
如何遍历这个数组,获取 id
并将其用于脚本创建的每个 VU?
最初的想法如下,但我确信它是不正确的。
export let options = {
stages: [
{ duration: '10s',target: 1 },{ duration: '10s',target: 10 },],};
const ids = [
{'id':1,'name':'name1'},{'id':3,'name':'name3'},{'id':4,'name':'name4'},{'id':18,'name':'name18'}];
export default function () {
for(var i=0; i<ids.length; i++) {
var user = ids[i];
//do something with user.id
}
}
根据 K6 手册,每个 VU 都会执行 default
函数内的所有内容,但这会使所有 VU 执行 for 循环,这不是我想要的行为。
我希望 VU 执行 for 中的内容,但对每个新 VU 使用不同的 id。像下面这样:
export default function () {
var user = ids[i];
//do something with user.id
}
解决方法
我最终使用... scenarios
:-) 和全局变量 __VU
的组合来解决这个特定场景。
在场景配置中,我说每个 VU 在整个测试过程中只会迭代 1 次,并且我将启动与 ids
数组中的 VU 一样多的 VU。这样,每个 VU 将使用其中一个 ID 并仅运行 default
函数 1 次。
因为 __VU
从 1 开始,我还必须使用 __VU-1
来正确索引数组。
const ids = [
{'id':1,'name':'name1'},{'id':3,'name':'name3'},{'id':4,'name':'name4'},{'id':18,'name':'name18'}];
export let options = {
scenarios: {
stress_test: {
executor: 'per-vu-iterations',vus: ids.length,iterations: 1
}
}
};
export default function () {
var user = ids[__VU-1];
//do something with user.id
}