如何在JMeter脚本中自动忽略压测ramp-up、ramp-down阶段的测试结果
JMeter 内置升降压阶段结果过滤方案
无需事后处理结果文件,也无需依赖第三方插件,直接在JMX脚本中实现运行时自动过滤升压、降压阶段的采样数据,仅保留恒定负载阶段的有效结果。
实现步骤
- 配置基础时长变量
在测试计划下新增「用户定义的变量」元件,添加2个全局变量,和线程组的压测配置保持一致:
ramp_up_duration:升压阶段总时长,单位为秒ramp_down_start:降压阶段起始时间,单位为秒,计算规则为压测总时长 - 降压阶段时长,例如总压测时长600秒、降压阶段60秒,该值填540即可。
- 新增运行阶段判断逻辑
在线程组下新增「JSR223 前置处理器」,选择Groovy作为解析语言,写入以下代码:
// 读取压测启动时间戳 def testStart = ctx.getThreadGroup().getStartTime() // 计算当前已运行时长(秒) def runTime = (System.currentTimeMillis() - testStart) / 1000 // 判断当前是否处于升降压阶段 if (runTime < ${ramp_up_duration} || runTime > ${ramp_down_start}) { vars.put("skip_current_sample", "true") } else { vars.put("skip_current_sample", "false") }
- 配置采样结果过滤规则
在所有需要过滤的采样器下新增「JSR223 后置处理器」,写入以下代码:
// 过滤升降压阶段的采样结果,同时支持额外自定义异常值过滤规则 if (vars.get("skip_current_sample") == "true") { // 标记该结果忽略,不会写入任何格式的结果文件 prev.setIgnore() } // 可扩展额外过滤规则,例如过滤响应码非200的异常结果 // if (prev.getResponseCode() != "200") { // prev.setIgnore() // }
方案优势
- 完全集成在JMX脚本内部,不需要事后对jtl、csv、xml格式的结果文件做二次筛选,无额外工作量
- 无需依赖第三方插件,Synthesis Report插件需要人工介入筛选,本方案运行时自动处理,全程无人工操作
- 规则可灵活扩展,除了升降压阶段过滤外,还可以自定义增加响应超时、错误响应等异常值的过滤逻辑。
内容的提问来源于stack exchange,提问作者Janesh Kodikara
相关产品推荐
相关产品推荐

