如何在JMeter中条件触发XPath Extractor与JSR223 Sampler?
解决JMeter仅在HTTP请求成功时执行XPath提取器和JSR223采样器的问题
要实现仅当HTTP请求执行成功时才触发XPath Extractors和JSR223 Sampler,可通过以下两种方案解决:
方案一:给组件添加条件判断
针对XPath Extractors
- 打开XPath Extractor的配置界面
- 在「Apply to」区域选择「Main Sample Only」,确保只作用于目标HTTP请求
- 勾选「Use Tester」选项,在「Tester」输入框中填入:
${JMeterThread.last_sample_ok}- 这个内置变量会在HTTP请求成功时返回
true,失败时返回false,只有变量为true时,XPath提取器才会执行
- 这个内置变量会在HTTP请求成功时返回
针对JSR223 Sampler
在JSR223 Sampler的脚本开头添加如下判断逻辑,直接跳过失败场景的执行:
// 检查前一个采样器(HTTP请求)是否成功 if (!ctx.getPreviousResult().isSuccessful()) { return; // 终止脚本执行 } // 原有业务脚本写在此处
方案二:使用If Controller控制组件执行
- 添加一个Transaction Controller,将目标HTTP请求、XPath Extractors和JSR223 Sampler全部移入其中
- 禁用Transaction Controller的「Include duration of timer and pre-post processors in generated sample」选项
- 在HTTP请求之后添加一个If Controller,将XPath Extractors和JSR223 Sampler移入If Controller内
- 设置If Controller的条件为:
${JMeterThread.last_sample_ok}- 只有当HTTP请求成功时,If Controller才会触发内部组件执行
补充说明
JMeterThread.last_sample_ok是JMeter内置变量,无需额外定义,可直接使用- 若HTTP请求涉及重定向,需确保「Follow Redirects」等请求配置符合业务预期,避免误判请求成功状态
内容的提问来源于stack exchange,提问作者Entrepreneur
相关产品推荐
相关产品推荐

