K6脚本Create阈值显示为0且标签不匹配问题求助
K6脚本本地与云端标签/阈值异常问题排查与解决
问题现象
- 本地以1个VU运行脚本时,Create请求的阈值显示通过但数值为0,调整阈值表达式
"http_req_duration{name:${}/cases,method:PUT}": ["max < 100"]后无改善 - 上传至K6 Cloud后,Cancel请求能正常显示自定义标签,而Create请求显示完整端点而非设置的标签
- 已尝试:增加
gracefulStop时长、修改端点写法、更换端点,均未解决
1. 先确认请求标签的定义是否准确
必须在http.put()请求中明确设置name标签,避免动态变量拼接导致的匹配失效:
// 正确写法:固定标签名,确保阈值能精准匹配 http.put(`${baseUrl}/cases`, payload, { tags: { name: "Create" } });
如果要用动态标签,本地加console.log()打印实际生成的标签值,验证是否和阈值表达式中的字符串完全一致——K6的阈值标签匹配是精确匹配,哪怕多一个空格都会导致匹配失败。
2. 修正阈值表达式的匹配规则
如果你的name标签是固定的"Create",阈值表达式要对应写死:
thresholds: { "http_req_duration{name:Create,method:PUT}": ["max < 100"], },
不要用${}/cases这种动态语法写在阈值里,除非你能确保运行时生成的标签和这个字符串完全一致,否则会出现“阈值统计为0”的情况——本质是没有匹配到任何请求。
3. 云端标签显示异常的排查
- 检查脚本是否有重复标签覆盖:比如某个逻辑分支里重新给
Create请求设置了name标签,或者请求发送时标签参数未正确传递 - 查看云端测试的原始日志:在K6 Cloud的测试详情中,找到
http_req的日志条目,直接看name字段的实际值,确认是否和脚本中设置的一致 - 确认云端测试配置和本地一致:比如是否启用了会修改标签的扩展,K6 Cloud不会自动覆盖自定义标签,大概率是脚本本身的标签逻辑有问题
4. 1个VU场景的特殊排查点
本地单VU运行时,如果请求没被执行到,也会导致阈值数值为0:
- 在
Create请求后加console.log("Create请求已执行"),确认请求是否真的触发 - 检查请求响应状态,确保请求成功发送:K6默认统计成功请求的指标,如果请求失败且未被标记为错误,可能会被排除在阈值统计外,可以用
check断言验证:
const createRes = http.put(...); check(createRes, { "Create请求成功": (r) => r.status === 200 });
修正后的脚本示例片段
import http from 'k6/http'; import { check } from 'k6'; export const options = { vus: 1, thresholds: { "http_req_duration{name:Create,method:PUT}": ["max < 100"], "http_req_duration{name:Cancel,method:POST}": ["max < 100"], }, }; export default function () { const baseUrl = "https://your-api.com"; // Create请求:明确设置固定标签 const createPayload = JSON.stringify({ key: "value" }); const createRes = http.put(`${baseUrl}/cases`, createPayload, { headers: { "Content-Type": "application/json" }, tags: { name: "Create" } }); check(createRes, { "Create请求成功": (r) => r.status === 200 }); // Cancel请求:正确设置标签 const cancelRes = http.post(`${baseUrl}/cases/cancel`, null, { tags: { name: "Cancel" } }); check(cancelRes, { "Cancel请求成功": (r) => r.status === 200 }); }
内容的提问来源于stack exchange,提问作者Sinem Kırtaç
相关产品推荐
相关产品推荐

