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