执行上下文变量
在某些情况下,获取有关脚本当前测试执行状态的信息非常有用。例如,您可能希望
- 让不同的虚拟用户 (VU) 运行不同的测试逻辑
- 为每个虚拟用户和迭代使用不同的数据
- 弄清楚测试处于哪个阶段
为了解决这些问题,您可以使用*执行上下文变量*。
k6/execution
k6/execution 模块公开了当前执行状态的详细信息,例如*当前执行的场景名称*、*当前活跃的虚拟用户数量*等。该模块通过三个属性提供测试执行信息
属性 | 有关以下方面的元信息和执行详情 |
---|---|
instance | 当前运行的 k6 实例 |
scenario | 当前运行的场景 |
vu | 当前虚拟用户和迭代 |
示例:记录所有上下文变量
如果您想在测试运行时了解每个上下文变量的样子,可以将此模板字面量复制到您的测试脚本中。
请注意,此处省略了 abort
变量,因为该函数会中止测试。
import exec from 'k6/execution';
export default function () {
console.log(`Execution context
Instance info
-------------
Vus active: ${exec.instance.vusActive}
Iterations completed: ${exec.instance.iterationsCompleted}
Iterations interrupted: ${exec.instance.iterationsInterrupted}
Iterations completed: ${exec.instance.iterationsCompleted}
Iterations active: ${exec.instance.vusActive}
Initialized vus: ${exec.instance.vusInitialized}
Time passed from start of run(ms): ${exec.instance.currentTestRunDuration}
Scenario info
-------------
Name of the running scenario: ${exec.scenario.name}
Executor type: ${exec.scenario.executor}
Scenario start timestamp: ${exec.scenario.startTime}
Percenatage complete: ${exec.scenario.progress}
Iteration in instance: ${exec.scenario.iterationInInstance}
Iteration in test: ${exec.scenario.iterationInTest}
Test info
---------
All test options: ${exec.test.options}
VU info
-------
Iteration id: ${exec.vu.iterationInInstance}
Iteration in scenario: ${exec.vu.iterationInScenario}
VU ID in instance: ${exec.vu.idInInstance}
VU ID in test: ${exec.vu.idInTest}
VU tags: ${exec.vu.tags}`);
}
有关详细参考,请参阅k6/execution 模块。
其他示例
注意
k6 v0.34.0 引入了 k6/execution 模块。如果您使用的 k6 版本没有此模块,请使用
__VU
和__ITER
。
__VU
和 __ITER
都是 k6 提供给测试脚本的包含执行上下文信息的全局变量。
__ITER
:表示特定虚拟用户当前迭代次数的数字计数器。从零开始计数。__VU
:当前正在使用的虚拟用户编号。k6 为每个新的虚拟用户实例递增地分配值,从一开始。在执行 setup 和 teardown 函数时,该变量为 0。
在 k6 Cloud 中运行
当您在 Grafana Cloud k6 中运行测试时,__VU 值是按服务器/负载生成器计算的。
示例
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('http://test.k6.io');
console.log(`VU: ${__VU} - ITER: ${__ITER}`);
sleep(1);
}
您可以使用执行上下文变量来配置不同的测试行为和参数化。一个典型的用例是模拟不同用户执行登录流程的负载测试。
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
const email = `user+${__VU}@mail.com`;
const payload = JSON.stringify({ email: email, password: 'test' });
const params = { headers: { 'Content-Type': 'application/json' } };
http.post('http://test.k6.io/login', payload, params);
console.log(email);
// .. continue the user flow
sleep(1);
}
Grafana Cloud k6 上下文变量
Grafana Cloud k6 会向正在运行的云测试注入额外的上下文变量。这些变量提供有关服务器 (K6_CLOUDRUN_INSTANCE_ID
)、负载区域 (K6_CLOUDRUN_LOAD_ZONE
)、实例 ID (K6_CLOUDRUN_INSTANCE_ID
) 和云分发 (K6_CLOUDRUN_DISTRIBUTION
) 的信息。
有关更多详细信息,请参阅云执行上下文变量。