菜单
开源

按 VU 迭代

使用 per-vu-iterations 执行器,每个 VU 执行精确数量的迭代。完成的迭代总数等于 vus * iterations

选项

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

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

何时使用

如果您需要特定数量的 VU 完成相同数量的迭代,请使用此执行器。当您拥有想要在 VU 之间划分的固定测试数据集时,这会很有用。

示例

以下示例安排 10 个 VU 分别执行 20 次迭代。测试总共运行 200 次迭代,最大持续时间为 30 秒。

JavaScript
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);
}

观察结果

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

Per VU Iterations

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

  • VU 数量固定为 10 个,并在测试开始前初始化;
  • 总迭代次数固定为每个 VU 20 次迭代,即总共 200 次迭代,10 个 VU * 每个 20 次迭代
  • 每次 default 函数迭代预计耗时约 515ms,即约 2 次/秒;
  • 因此,最大吞吐量(最高效率)预计约为 20 次/秒,2 次迭代/秒 * 10 个 VU
  • 达到了最大吞吐量,但未能维持;
  • 由于迭代在 VU 之间均匀分配,一个快速的 VU 可能会提前完成并在测试剩余时间内处于空闲状态,从而降低效率;
  • 总持续时间为 9 秒,由于效率较低,略长于共享迭代
  • 整个测试持续时间取决于最慢的 VU 完成 20 个请求所需的时间。