You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter如何调用aggregate_rpt_pct属性实现百分位断言?

JMeter百分位属性阈值校验方案

JMeter没有内置的专门直接调取aggregate_rpt_pct1/aggregate_rpt_pct2/aggregate_rpt_pct3做阈值校验的断言组件,你可以通过以下两种方案实现需求,同时适配本地执行和后续Azure DevOps迁移的场景:

方案1:JSR223断言(推荐,灵活度高)

该方案适合需要自定义多规则校验、后续要对接CI/CD流程的场景,性能和扩展性都更好:

  • 校验逻辑需要放在所有业务请求执行完成、聚合报告计算完成之后运行,建议把断言放在独立的Teardown线程组中,避免读取到空的属性值
  • 新增JSR223断言,选择Groovy作为脚本语言(JMeter官方推荐,性能远高于其他脚本语言)
  • 参考以下代码实现校验逻辑,可根据实际需求调整阈值和判断规则:
// 读取内置百分位属性,转换为double类型用于数值比较
def p90 = props.get("aggregate_rpt_pct1") as double
def p95 = props.get("aggregate_rpt_pct2") as double
def p99 = props.get("aggregate_rpt_pct3") as double

// 阈值可直接写死,也可通过自定义属性传入适配不同环境
def expectP90 = props.get("expect_p90", "1000") as double
def expectP95 = props.get("expect_p95", "1500") as double
def expectP99 = props.get("expect_p99", "2000") as double

// 校验逻辑
String errorMsg = ""
if (p90 > expectP90) {
    errorMsg += "90百分位超出阈值,实际值:${p90}ms,预期值:≤${expectP90}ms;"
}
if (p95 > expectP95) {
    errorMsg += "95百分位超出阈值,实际值:${p95}ms,预期值:≤${expectP95}ms;"
}
if (p99 > expectP99) {
    errorMsg += "99百分位超出阈值,实际值:${p99}ms,预期值:≤${expectP99}ms;"
}

if (errorMsg) {
    AssertionResult.setFailure(true)
    AssertionResult.setFailureMessage(errorMsg)
}
  • 对接Azure DevOps时不需要修改脚本,直接在执行命令中通过参数传入阈值即可,示例命令:
    jmeter -n -t your_test_plan.jmx -Jexpect_p90=800 -Jexpect_p95=1200 -Jexpect_p99=1800 -l test_result.jtl

方案2:响应断言(无代码方案)

如果不想写代码,可通过变量+响应断言的方式实现基础校验:

  • 新增用户定义的变量组件,定义三个变量分别对应三个百分位值,取值分别为${__P(aggregate_rpt_pct1,)}、${__P(aggregate_rpt_pct2,)}、${__P(aggregate_rpt_pct3,)}
  • 新增响应断言,匹配字段选择「响应文本」,匹配规则选择「数值小于等于」,填入对应的预期阈值即可

注意:该方案只能单条校验,不支持多规则组合判断,灵活度较低,仅适合简单校验场景
额外注意:aggregate_rpt_pct1等属性是聚合报告组件计算完成后才会写入的全局属性,必须保证聚合报告组件的执行顺序在断言之前,否则会读取到空值导致校验失败

内容的提问来源于stack exchange,提问作者Icaroto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:54:03