我们如何编写具有动态阶段数的 k6 脚本?
Posted
技术标签:
【中文标题】我们如何编写具有动态阶段数的 k6 脚本?【英文标题】:How do we code k6 scripts that have dynamic number of stages? 【发布时间】:2022-01-16 03:20:37 【问题描述】:本质上,如果在一次运行中我需要 2 个阶段,参数是恒定的或具有算术或几何级数,而在第二次运行中我想运行 3/4/5.....n 个阶段。
这是在 k6 中定义场景/阶段的方式:
export let options =
scenarios:
stage_1:
executor: 'constant-arrival-rate',
rate: __ENV.STAGE_1_RPS,
timeUnit: '1s',
startTime: __ENV.STAGE_1_START_TIME,
duration: __ENV.STAGE_1_DUR,
preAllocatedVUs: __ENV.STAGE_1_VUS
,
stage_2:
executor: 'constant-arrival-rate',
rate: __ENV.STAGE_1_RPS + 100,
timeUnit: '1s',
startTime: __ENV.STAGE_2_START_TIME,
duration: __ENV.STAGE_2_DUR,
preAllocatedVUs: __ENV.STAGE_2_VUS
使用上面的格式,如果需要运行n个不同数量的阶段,则需要编写n个不同的脚本,这似乎是一个不错的方法。
浏览过 k6 文档,但似乎没有一些特性/参数可以提供上述功能:https://k6.io/docs/using-k6/
【问题讨论】:
【参考方案1】:经过多种资源,想出了这个使用javascript基础的解决方案(基本上,如果框架没有功能集,就启动一个解决方案!)
for(var i = 1; i <= noOfStages; i++)
scenariosDynamic["stage_" + i] =
executor: 'constant-arrival-rate',
rate: stageRps,
timeUnit: '1s',
startTime: stageStartTime,
duration: stageRunDuration,
preAllocatedVUs: 10,
;
stageRps = +stageRps + +rampRps;
stageStartTime += stageDuration;
export let options =
scenarios: scenariosDynamic
;
只需使用括号表示法创建一个带有动态键的 javascript 对象。
【讨论】:
以上是关于我们如何编写具有动态阶段数的 k6 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
如何编写 powershell 脚本来知道磁盘是基本的还是动态的?