3. k6 脚本核心结构:理解 default 函数、VU 与迭代的概念、options 对象的基本配置

在编写 k6 容量压测脚本之前,必须掌握其核心执行模型。k6 脚本并非传统的线性执行程序,而是围绕 虚拟用户(VU) 和 迭代(Iteration) 构建的并发模型。本章将拆解脚本的三大支柱:default 函数、VU/迭代机制以及 options 配置对象。

3.1 脚本入口:default 函数

k6 脚本的核心是一个名为 default 的导出函数。这是每个 VU 执行测试逻辑的入口点。当 k6 运行时,每个 VU 都会独立地重复调用这个函数,直到达到设定的停止条件。

核心规则: 每个 VU 每次迭代只执行一次 default 函数。函数内的代码定义了单个用户在单次业务操作中的完整行为。
import http from 'k6/http';
import { sleep } from 'k6';

// default 函数:每个 VU 每次迭代执行的逻辑
export default function () {
  // 1. 发送 HTTP 请求
  let response = http.get('https://test.k6.io');

  // 2. 检查响应状态
  // (此处可添加 check 断言)

  // 3. 模拟用户思考时间
  sleep(1);
}

3.2 VU 与迭代:并发执行模型

理解 VU 和迭代是配置压测规模的基础。它们共同决定了脚本的执行方式与负载量。

概念 定义 类比说明
VU(虚拟用户) 模拟的独立用户,每个 VU 拥有独立的 JavaScript 运行时和上下文(如全局变量、Cookie jar)。 相当于一个独立的浏览器标签页或一个真实的用户终端。
迭代(Iteration) VU 执行一次 default 函数的过程。一个 VU 可以执行多次迭代。 相当于用户完成一次完整的操作流程(如:打开页面 → 点击 → 退出)。
关键区别: VU 是并发执行的实体,而迭代是每个 VU 内部重复执行的动作。增加 VU 数增加并发度,增加迭代数增加总请求量。

下图展示了 2 个 VU 各执行 3 次迭代的执行流程:

VU 与迭代执行模型(2 VU × 3 迭代) VU #1 迭代 1:执行 default() 迭代 2:执行 default() 迭代 3:执行 default() VU #2 迭代 1:执行 default() 迭代 2:执行 default() 迭代 3:执行 default() 时间轴 → 所有 VU 并发执行,各自独立完成迭代

3.3 options 对象:配置执行参数

options 是脚本中导出的一个配置对象,用于定义压测的执行参数。它决定了 VU 数量、执行时长、迭代次数等核心行为。

3.3.1 三个核心配置项

配置项 类型 说明 示例
vus number 并发虚拟用户数,决定同时执行 default 函数的 VU 数量。 vus: 10
duration string 测试总持续时间,格式为 "数字+单位"(s/m/h)。所有 VU 在此时间内持续执行迭代。 duration: '30s'
iterations number 每个 VU 执行的迭代次数。如果同时设置了 duration,以先达到的条件为准。 iterations: 100
配置冲突注意: 同时设置 duration 和 iterations 时,k6 会以先满足的条件作为停止信号。例如,vus: 10, duration: '10s', iterations: 100,如果 10 秒内所有 VU 的总迭代数未达到 1000(10×100),测试会在 10 秒后停止;反之,如果迭代数提前完成,测试也会提前结束。

3.3.2 完整配置示例

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

// options 对象:定义压测执行参数
export let options = {
  vus: 5,           // 5 个并发虚拟用户
  duration: '1m',   // 持续运行 1 分钟
  // iterations: 50, // 可选:每个 VU 执行 50 次迭代(与 duration 二选一或组合使用)
};

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

3.4 执行流程与参数关系图

下图展示了 options 配置如何驱动 VU 和迭代的执行:

options 驱动 VU 与迭代执行流程 options 配置 vus: 10 duration: '30s' iterations: 50 k6 执行引擎 解析 options → 调度 VU VU 池 创建 10 个 VU 迭代循环 每个 VU 执行 default() 停止条件检查 duration 或 iterations 先到 未达到停止条件 → 继续迭代 测试结束

3.5 实战配置建议

  • 巡检场景: 建议使用 vus + duration 组合,模拟固定并发用户在持续时间内反复巡检,更贴近真实巡检行为。
  • 容量验证场景: 建议使用 vus + iterations 组合,确保每个 VU 完成固定次数的业务操作,便于计算总吞吐量。
  • 预热阶段: 可在 options 中通过 stages(后续章节详解)实现 VU 数渐变,避免瞬时冲击。
巡检参数配置口诀: “VU 定并发,时长控持续,迭代控总量,组合看场景。”