JSR223断言失败但Sampler未失败,如何让主Sampler失败?
解决JMeter JSR223断言失败但主Sampler未失败的问题
核心排查点与解决方案
1. 确认JSR223断言的作用域
确保你的JSR223断言是直接挂载在目标Sampler节点下,而非线程组或其他父级节点。如果断言作用域覆盖多个Sampler,可能无法正确标记单个Sampler的失败状态。
2. 修正JSR223断言代码
当前代码缺少对errorvalue或experror为空的判断,可能导致未预期的异常,进而影响断言逻辑执行。以下是完善后的代码:
// 获取实际返回的错误消息 def errorvalue = vars.getObject("errorvalue_1") log.info("实际返回的错误消息: " + errorvalue) // 获取预期的错误消息 def experror = vars.get("ErrorMsg") log.info("预期的错误消息: " + experror) // 先判空,避免空指针异常 if (errorvalue == null || experror == null) { log.info("错误消息为空,断言失败") AssertionResult.setFailure(true) AssertionResult.setFailureMessage("实际或预期错误消息为空") } else if (errorvalue.toString().equals(experror.toString())) { log.info("错误消息匹配") AssertionResult.setFailure(false) AssertionResult.setFailureMessage("错误消息匹配") } else { log.info("错误消息不匹配") AssertionResult.setFailure(true) AssertionResult.setFailureMessage("错误消息不匹配:实际值[" + errorvalue + "],预期值[" + experror + "]") }
3. 检查JSR223断言的配置
在JSR223断言的配置界面,确保:
- 选择的语言是Groovy(推荐使用Groovy而非其他语言,兼容性更好)
- 未勾选"Continue on error"选项(如果勾选,即使断言失败也不会终止Sampler的失败标记)
4. 补充状态码验证
你的场景需要验证状态码=400,建议额外添加一个响应断言:
- 勾选"响应代码"
- 匹配规则选择"Equals"
- 填入预期值
400
将该断言同样挂载在目标Sampler下,确保状态码不匹配时也能标记Sampler失败。
内容的提问来源于stack exchange,提问作者Madhu Manohar
相关产品推荐
相关产品推荐

