我们如何编写具有动态阶段数的 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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在k6工具中模拟/脚本AD集成SSO登录

我们可以编写 Scala/Spark 通用动态编写的代码吗

如何编写 powershell 脚本来知道磁盘是基本的还是动态的?

k6:增加VU数量的每个阶段如何管理rps-limit

您如何在 Robot Framework 中编写具有多个标识符的动态元素?

如何编写python脚本?教你做简单的爬虫,适合初学者