详解Grafana k6 的阈值(Thresholds)

k6 的阈值(Thresholds)是定义性能测试通过/失败标准的核心机制,允许您为关键指标设置可接受的性能边界。当测试结果超过阈值时,k6 会返回非零退出码,标记测试失败。

一、阈值核心概念

  1. 定义位置 :在 options 对象中声明

    javascript 复制代码
    export const options = {
      thresholds: {
        // 阈值规则在此定义
      }
    };
  2. 基本语法

    复制代码
    '指标名{标签过滤}': [ '条件1', '条件2' ]
  3. 执行特点

    • 实时评估(测试期间持续监控)

    • 测试结束时进行最终评估

    • 任意阈值失败 → 整个测试失败(exit code ≠ 0)

二、常用阈值参数详解

1. HTTP 请求相关指标
参数 含义 用法示例 说明
http_req_duration 请求总耗时(ms) 'p(95)<500' 95%请求耗时<500ms
http_req_failed 请求失败率 'rate<0.01' 失败率<1%
http_req_waiting 等待服务器响应时间(TTFB) 'max<1000' 最大等待时间<1s
http_req_connecting TCP连接时间 'avg<50' 平均连接时间<50ms

标签过滤示例

javascript 复制代码
thresholds: {
  'http_req_duration{status:200}': ['p(95)<300'], // 仅监控200响应
  'http_req_duration{method:POST}': ['p(90)<800'] // 仅监控POST请求
}
2. 测试流程指标
参数 含义 用法示例 说明
iterations 完成的迭代总数 'count>1000' 至少完成1000次迭代
iteration_duration 单次迭代耗时 'p(99)<5000' 99%迭代耗时<5s
vus 虚拟用户数 'value>50' 峰值VU数>50
vus_max 配置的最大VU数 'value==100' 验证VU配置正确性
3. 自定义检查指标
javascript 复制代码
import { check } from 'k6';

// 定义检查点
export default function () {
  check(res, {
    '状态码是200': (r) => r.status === 200,
    '包含有效数据': (r) => r.json().data.length > 0
  });
}

// 阈值配置
thresholds: {
  'checks{name:包含有效数据}': ['rate>0.99'] // 特定检查成功率>99%
}
4. 自定义指标阈值
javascript 复制代码
import { Trend, Rate } from 'k6/metrics';

// 创建自定义指标
const authDuration = new Trend('auth_duration');
const premiumRate = new Rate('premium_users');

// 阈值配置
thresholds: {
  'auth_duration': ['p(90)<200'], 
  'premium_users': ['rate>0.2']   // 20%用户是高级用户
}

三、阈值运算符详解

1. 时间类型指标(Trend)
运算符 示例 含义
avg 'avg<500' 平均值<500ms
min 'min>100' 最小值>100ms
max 'max<2000' 最大值<2000ms
p(percent) 'p(99)<800' 99百分位数<800ms
med 'med<400' 中位数<400ms
2. 比率类型指标(Rate)
运算符 示例 含义
rate 'rate>0.95' 成功率>95%
count 'count>100' 发生次数>100

四、高级用法示例

1. 多条件组合
javascript 复制代码
thresholds: {
  http_req_duration: [
    'max<3000',     // 硬性要求:所有请求<3s
    'p(99)<1500',   // 关键要求:99%请求<1.5s
    'p(95)<800'     // 优化要求:95%请求<800ms
  ]
}
2. 分阶段阈值(结合Scenarios)
javascript 复制代码
scenarios: {
  spike_test: {
    executor: 'ramping-vus',
    stages: [
      { duration: '1m', target: 100 },
      { duration: '3m', target: 500 }
    ],
    thresholds: {
      'http_req_duration{stage:spike}': ['p(95)<1000'] // 仅针对此场景
    }
  }
}
3. 错误熔断机制
javascript 复制代码
thresholds: {
  http_req_failed: [
    { threshold: 'rate<0.02', abortOnFail: true } // 错误率>2%时立即终止测试
  ]
}

五、最佳实践建议

  1. 关键指标优先

    javascript 复制代码
    // 核心三件套
    'http_req_failed': ['rate<0.01'],    // 错误率<1%
    'http_req_duration': ['p(95)<500'],  // 95%请求<500ms
    'checks': ['rate>0.99']              // 检查点>99%通过率
  2. 分层设置阈值

    • 严格阈值:核心业务流(如登录/支付)

    • 宽松阈值:非关键路径(如静态资源)

  3. 结合标签精细化监控

    javascript 复制代码
    'http_req_duration{group:::重要API}': ['p(90)<300'],
    'http_req_duration{group:::次要API}': ['p(90)<800']
  4. 在CI/CD中的典型应用

    bash 复制代码
    k6 run --threshold-http-req-failed="rate<0.01" script.js
相关推荐
llilian_1617 小时前
信号发生器 多通道多功能脉冲信号发生器应用解决方案 多功能脉冲发生器
功能测试·单片机·嵌入式硬件·测试工具
程序员小远18 小时前
使用Postman进行一次完整的接口测试
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
我的xiaodoujiao19 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--将自动化测试结果自动推送至钉钉工作群聊
前端·python·测试工具·ui·pytest
生活很暖很治愈19 小时前
GUI自动化测试[3]——控件&数鼠标操作
windows·python·功能测试·测试工具
我的xiaodoujiao21 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 45--生成项目需要的requirements.txt依赖文件
python·学习·测试工具·pytest
Yeats_Liao1 天前
压力测试实战:基于Locust的高并发场景稳定性验证
人工智能·深度学习·机器学习·华为·开源·压力测试
@zulnger1 天前
selenium 自动化测试工具实战项目(订单)
selenium·测试工具·自动化
深圳博众测控2 天前
博众测控 | ISO 16750-2:2023汽车电气测试新标准解读:关键变化与测试设备选型
人工智能·测试工具·汽车
测试界的世清2 天前
金九银十软件测试面试题(800道)
测试工具·面试·职场和发展
帝落若烟2 天前
loadrunner {“msg“:“请求访问:/getInfo,认证失败,无法访问系统资源“,“code“:401}
测试工具·压力测试