K6 根据 VU Id 顺序请求 API

问题描述

我正在使用 K6、JavaScript 制作一个负载测试程序,我想在其中根据 VU id 顺序请求 API。

例如,假设我有 5 个不同的有效载荷,每个有效载荷有 5 个 VU。

我希望我的程序运行,例如,在第 1 分钟,只有 VU-1 将通过我的第一个有效载荷连续执行请求,然后在下一分钟,VU-2 将执行,依此类推,直到第 5 次,然后再次执行第 1 个 VU将被执行。

根据 VU Id,我将更改有效负载

我尝试过 JavaScript 的 setTimeout() 方法,但无法使用 k6。

我也尝试过 k6 文档中的场景选项,但它是并行运行的。这是我试过的代码片段。

export let options = {
  scenarios: {
    execution: {
      scenario1: {
          type: "per-vu-iterations",vus: 1,iterations: 1,maxDuration: "15s",exec: "scenario1",},scenario2: {
          type: "per-vu-iterations",exec: "scenario2",}
  }
}


export function scenario1() {
  let res = http.get("https://test.loadimpact.com/");
  console.log(__VU);
  check(res,{
    "is status 200": (r) => r.status === 200
  });
};

export function scenario2() {
  let res = http.get("https://test.loadimpact.com/");
  console.log(__VU);
  check(res,{
    "is status 200": (r) => r.status === 200
  });
};

他们在 K6 中有什么方法可以实现这一点吗?

解决方法

我发现此问题的一个解决方案是使用带有执行器和 startTime 参数的 Scenerios 选项。但我面临的此解决方案中的问题是我无法查看单个场景的指标结果。

如果有任何方法可以显示指标,请分享。

这是一个顺序运行的示例代码。

export let options = {
  scenarios: {
    scenario_1: {
        executor: "constant-vus",vus: 1,duration: "1m",exec: "scenario1",tags: { test_type: 'api-test1' },},scenario_2: {
        executor: "constant-vus",exec: "scenario2",startTime: "1m",tags: { test_type: 'api-test2' },}

export function scenario1() {

  let res = http.get("https://example.com/");
  console.log(JSON.stringify(res));
};

export function scenario2() {

  let res = http.get("https://example.com/");
  console.log(JSON.stringify(res));
  
};