如何使用BeanShell或JSR223验证JDBC请求的Oracle DB响应结果
实现JDBC返回结果校验的方案
推荐优先使用JSR223断言(语言选择Groovy),性能远优于BeanShell,实现逻辑如下:
前置配置
在JDBC Request采样器中,确保变量名称字段填写为dataFromDB,和你调试输出的结果变量名保持一致。
JSR223校验代码
把以下代码复制到JSR223断言的脚本输入框中:
// 预期校验值 def expectedEventLogId = 48144960 // 获取返回的记录总数 int rowCount = dataFromDB.size() // 校验1:记录数不超过1条 if (rowCount > 1) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("校验失败:返回记录数超过1条,实际返回" + rowCount + "条") return } // 可选校验:如果不允许返回0条记录,放开下面的注释即可 /* if (rowCount == 0) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("校验失败:未查询到符合条件的记录") return } */ // 校验2:EVENT_LOG_ID匹配(仅当返回1条记录时执行) if (rowCount == 1) { def actualId = dataFromDB.get(0).get("EVENT_LOG_ID") as Integer if (actualId != expectedEventLogId) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("校验失败:EVENT_LOG_ID不匹配,预期为" + expectedEventLogId + ",实际为" + actualId) } }
BeanShell版本(仅兼容旧版本JMeter场景使用)
如果必须使用BeanShell,调整代码如下:
// 预期校验值 int expectedEventLogId = 48144960; // 获取返回的记录总数 int rowCount = dataFromDB.size(); // 校验1:记录数不超过1条 if (rowCount > 1) { Failure = true; FailureMessage = "校验失败:返回记录数超过1条,实际返回" + rowCount + "条"; return; } // 可选校验:如果不允许返回0条记录,放开下面的注释即可 /* if (rowCount == 0) { Failure = true; FailureMessage = "校验失败:未查询到符合条件的记录"; return; } */ // 校验2:EVENT_LOG_ID匹配(仅当返回1条记录时执行) if (rowCount == 1) { int actualId = ((Integer)dataFromDB.get(0).get("EVENT_LOG_ID")).intValue(); if (actualId != expectedEventLogId) { Failure = true; FailureMessage = "校验失败:EVENT_LOG_ID不匹配,预期为" + expectedEventLogId + ",实际为" + actualId; } }
内容的提问来源于stack exchange,提问作者user16923013
相关产品推荐
相关产品推荐

