菜单
开源

共享迭代

shared-iterations 执行器在 VU 数量之间共享迭代。k6 执行完所有迭代后测试结束。

要快速使用此执行器,请使用vusiterations选项。

注意

使用此执行器时,迭代不保证均匀分布。执行速度更快的 VU 将比慢速 VU 完成更多迭代。

要保证每个 VU 完成特定数量的固定迭代,请使用每 VU 迭代执行器

选项

除了通用配置选项之外,此执行器还具有以下选项

选项类型描述默认值
vus整数并发运行的 VU 数量。1
iterations整数所有 VU 执行的脚本迭代总数。1
maxDuration字符串场景被强制停止前的最大持续时间(不包括 gracefulStop)。"10m"

何时使用

当您希望特定数量的 VU 完成固定总迭代次数,且每个 VU 的迭代数量不重要时,此执行器非常适合。如果您关心完成一定数量测试迭代的时间,此执行器应能提供最佳性能。

一个示例用例是在开发构建周期中进行快速性能测试。当开发人员进行更改时,他们可以针对本地代码运行测试以检查性能退化。因此,此执行器非常适合“左移”策略,即强调在开发周期的早期阶段测试性能,因为此时修复成本最低。

示例

以下示例调度了由 10 个 VU 共享的总共 200 次迭代,最大测试持续时间为 30 秒。

JavaScript
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  discardResponseBodies: true,
  scenarios: {
    contacts: {
      executor: 'shared-iterations',
      vus: 10,
      iterations: 200,
      maxDuration: '30s',
    },
  },
};

export default function () {
  http.get('https://test.k6.io/contacts.php');
  // Injecting sleep
  // Sleep time is 500ms. Total iteration time is sleep + time to finish request.
  sleep(0.5);
}

观察结果

下图描绘了示例脚本的性能

Shared Iterations

根据我们的测试场景输入和结果

  • 测试被限制在固定数量的 default 函数的 200 次迭代;
  • VU 数量固定为 10,并在测试开始前初始化;
  • default 函数的每次迭代预计耗时约 515ms,即约 2 次/秒;
  • 因此,最大吞吐量(最高效率)预计约为 20 次迭代/秒,即 2 次迭代/秒 * 10 个 VU
  • 最大吞吐量在测试的大部分时间内得以保持;
  • 迭代的分布可能不均匀:一个 VU 可能执行了 50 次迭代,而另一个只执行了 10 次。