共享迭代
shared-iterations
执行器在 VU 数量之间共享迭代。k6 执行完所有迭代后测试结束。
要快速使用此执行器,请使用vus
和iterations
选项。
注意
使用此执行器时,迭代不保证均匀分布。执行速度更快的 VU 将比慢速 VU 完成更多迭代。
要保证每个 VU 完成特定数量的固定迭代,请使用每 VU 迭代执行器。
选项
除了通用配置选项之外,此执行器还具有以下选项
选项 | 类型 | 描述 | 默认值 |
---|---|---|---|
vus | 整数 | 并发运行的 VU 数量。 | 1 |
iterations | 整数 | 所有 VU 执行的脚本迭代总数。 | 1 |
maxDuration | 字符串 | 场景被强制停止前的最大持续时间(不包括 gracefulStop )。 | "10m" |
何时使用
当您希望特定数量的 VU 完成固定总迭代次数,且每个 VU 的迭代数量不重要时,此执行器非常适合。如果您关心完成一定数量测试迭代的时间,此执行器应能提供最佳性能。
一个示例用例是在开发构建周期中进行快速性能测试。当开发人员进行更改时,他们可以针对本地代码运行测试以检查性能退化。因此,此执行器非常适合“左移”策略,即强调在开发周期的早期阶段测试性能,因为此时修复成本最低。
示例
以下示例调度了由 10 个 VU 共享的总共 200 次迭代,最大测试持续时间为 30 秒。
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);
}
观察结果
下图描绘了示例脚本的性能
根据我们的测试场景输入和结果
- 测试被限制在固定数量的
default
函数的 200 次迭代; - VU 数量固定为 10,并在测试开始前初始化;
default
函数的每次迭代预计耗时约 515ms,即约 2 次/秒;- 因此,最大吞吐量(最高效率)预计约为 20 次迭代/秒,即
2 次迭代/秒 * 10 个 VU
; - 最大吞吐量在测试的大部分时间内得以保持;
- 迭代的分布可能不均匀:一个 VU 可能执行了 50 次迭代,而另一个只执行了 10 次。