按 VU 迭代
使用 per-vu-iterations
执行器,每个 VU 执行精确数量的迭代。完成的迭代总数等于 vus * iterations
。
选项
除了通用配置选项外,此执行器还具有以下选项
选项 | 类型 | 描述 | 默认值 |
---|---|---|---|
vus | 整数 | 并发运行的 VU 数量。 | 1 |
iterations | 整数 | 每个 VU 执行的 exec 函数迭代次数。 | 1 |
maxDuration | 字符串 | 场景在强制停止前的最大持续时间(不包括 gracefulStop )。 | "10m" |
何时使用
如果您需要特定数量的 VU 完成相同数量的迭代,请使用此执行器。当您拥有想要在 VU 之间划分的固定测试数据集时,这会很有用。
示例
以下示例安排 10 个 VU 分别执行 20 次迭代。测试总共运行 200 次迭代,最大持续时间为 30 秒。
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
discardResponseBodies: true,
scenarios: {
contacts: {
executor: 'per-vu-iterations',
vus: 10,
iterations: 20,
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);
}
观察结果
以下图表描绘了示例脚本的性能
根据我们的测试场景输入和结果
- VU 数量固定为 10 个,并在测试开始前初始化;
- 总迭代次数固定为每个 VU 20 次迭代,即总共 200 次迭代,
10 个 VU * 每个 20 次迭代
; - 每次
default
函数迭代预计耗时约 515ms,即约 2 次/秒; - 因此,最大吞吐量(最高效率)预计约为 20 次/秒,
2 次迭代/秒 * 10 个 VU
; - 达到了最大吞吐量,但未能维持;
- 由于迭代在 VU 之间均匀分配,一个快速的 VU 可能会提前完成并在测试剩余时间内处于空闲状态,从而降低效率;
- 总持续时间为 9 秒,由于效率较低,略长于共享迭代;
- 整个测试持续时间取决于最慢的 VU 完成 20 个请求所需的时间。