计算 iteration_duration 的权宜之计
一个常见的需求是跟踪 iteration_duration 指标,但不包含 setup 和 teardown 函数所花费的时间。此功能尚不可用,但可以使用基于 iteration_duration 或任何现有指标的阈值作为权宜之计。
其基于为所需范围的标签创建子指标阈值,并设置始终通过的条件这一概念。它适用于任何已启用且已与阈值一起使用的标签,例如
iteration_duration{scenario:default}生成一个子指标,仅收集默认场景迭代的样本。使用scenario:default是因为在我们没有显式指定options.scenarios而仅使用执行快捷方式时,它是内部 k6 场景名称。iteration_duration{group:::setup}或iteration_duration{group:::teardown}创建子指标,仅收集setup和teardown的时长。k6 会隐式为setup和teardown创建分组,而::是分组分隔符。http_req_duration{scenario:default}也可以用于隔离执行的长时间运行请求。
import { sleep } from 'k6';
import http from 'k6/http';
export const options = {
vus: 1,
iterations: 1,
thresholds: {
'iteration_duration{scenario:default}': [`max>=0`],
'iteration_duration{group:::setup}': [`max>=0`],
'iteration_duration{group:::teardown}': [`max>=0`],
'http_req_duration{scenario:default}': [`max>=0`],
},
};
export function setup() {
http.get('https://quickpizza.grafana.com/api/delay/5');
}
export default function () {
http.get('http://test.k6.io/?where=default');
sleep(0.5);
}
export function teardown() {
http.get('https://quickpizza.grafana.com/api/delay/3');
sleep(5);
}已生成专用子指标,仅收集由阈值定义的范围内的样本
█ THRESHOLDS
http_req_duration{scenario:default}
✓ 'max>=0' max=117.34ms
iteration_duration{group:::setup}
✓ 'max>=0' max=0s
iteration_duration{group:::teardown}
✓ 'max>=0' max=0s
iteration_duration{scenario:default}
✓ 'max>=0' max=1.13s

