菜单
开源 RSS

场景

场景可以详细配置 VUs 和迭代调度。通过场景,您可以在负载测试中模拟不同的工作负载或流量模式。

使用场景的好处包括

  • 更轻松、更灵活的测试组织。您可以在同一个脚本中声明多个场景,每个场景都可以独立执行不同的 JavaScript 函数。
  • 模拟更真实的流量。每个场景都可以使用不同的 VU 和迭代调度模式,这由专门构建的执行器支持。
  • 并行或顺序工作负载。场景相互独立并并行运行,但可以通过仔细设置每个场景的 startTime 属性来使其看起来是顺序的。
  • 细粒度结果分析。可以为每个场景设置不同的环境变量和指标标签。

配置场景

要配置场景,请在 options 对象中使用 scenarios 键。您可以为场景指定任何名称,只要脚本中的每个场景名称是唯一的即可。

场景名称会出现在结果摘要、标签等中。

JavaScript
export const options = {
  scenarios: {
    example_scenario: {
      // name of the executor to use
      executor: 'shared-iterations',

      // common scenario configuration
      startTime: '10s',
      gracefulStop: '5s',
      env: { EXAMPLEVAR: 'testing' },
      tags: { example_tag: 'testing' },

      // executor-specific configuration
      vus: 10,
      iterations: 200,
      maxDuration: '10s',
    },
    another_scenario: {
      /*...*/
    },
  },
};

场景执行器

对于每个 k6 场景,VU 工作负载由一个执行器调度。执行器配置测试运行多长时间,流量是保持不变还是变化,以及工作负载是按 VUs 建模还是按到达率建模(即开放或封闭模型)。

您的场景对象必须使用预定义的执行器名称之一来定义 executor 属性。您选择的执行器决定了 k6 如何模拟负载。可用的执行器包括

除了通用场景选项外,每个执行器对象还有针对其工作负载的附加选项。有关完整列表,请参阅执行器

场景选项

选项类型描述默认值
executor(必需)string唯一的执行器名称。请参阅执行器部分的可能值列表。-
startTimestring自测试开始以来的时间偏移量,此时该场景应开始执行。"0s"
gracefulStopstring在强制停止迭代之前等待其完成执行的时间。要了解更多信息,请阅读平滑停止"30s"
execstring要执行的导出 JS 函数名称。"default"
envobject此场景特有的环境变量。{}
tagsobject此场景特有的标签{}
optionsobject附加选项包括浏览器选项{}

场景示例

此脚本结合了两个带顺序的场景

  • shared_iter_scenario 立即开始。十个 VU 尝试尽快使用 100 次迭代(有些 VU 可能比其他 VU 使用更多迭代)。
  • per_vu_scenario 在 10 秒后开始。在这种情况下,每个 VU 运行十次迭代。

哪个场景花费时间更长?您可以运行测试来发现。您还可以为一个或两个场景添加 maxDuration 属性。

JavaScript
import http from 'k6/http';

export const options = {
  scenarios: {
    shared_iter_scenario: {
      executor: 'shared-iterations',
      vus: 10,
      iterations: 100,
      startTime: '0s',
    },
    per_vu_scenario: {
      executor: 'per-vu-iterations',
      vus: 10,
      iterations: 10,
      startTime: '10s',
    },
  },
};

export default function () {
  http.get('https://test.k6.io/');
}

如果您运行带有场景的脚本,k6 输出会包含每个场景的高级信息。例如,如果您运行上面的脚本,k6 run scenario-example.js,则 k6 会按如下方式报告场景

bash
  execution: local
     script: scenario-example.js
     output: -

  scenarios: (100.00%) 2 scenarios, 20 max VUs, 10m40s max duration (incl. grace
ful stop):
           * shared_iter_scenario: 100 iterations shared among 10 VUs (maxDurati
on: 10m0s, gracefulStop: 30s)
           * per_vu_scenario: 10 iterations for each of 10 VUs (maxDuration: 10m
0s, startTime: 10s, gracefulStop: 30s)

完整的输出包括汇总指标,就像任何默认的测试结束摘要一样