JMeter中为JDBC Request请求结果应用断言的实操问题
解决方案
第一步:修正JDBC请求的变量配置
你目前Debug Sampler只获取到id列的数值,是因为JDBC请求的Variable names配置项只配置了单个变量,导致其他列的查询结果没有被存储。按以下步骤调整:
- 打开你配置的JDBC Request采样器,找到
Variable names输入框 - 按照你查询语句返回的列顺序,填写对应变量名:
id,username,bonus,多个变量用英文逗号分隔,不要加空格
配置完成后,JDBC查询的结果会按行存储为JMeter变量,格式为变量名_行号,例如第二行的username存储为username_2,第二行的bonus存储为bonus_2,总行数会存储在id_#变量中。
第二步:配置断言
有两种常用方案可以实现你的校验需求:
方案1:修改SQL简化校验(推荐,无需写代码)
如果你的场景允许调整查询语句,直接把SQL修改为定向查询:
SELECT bonus FROM 你的表名 WHERE username = 'john'
然后在Variable names输入框只填bonus,查询完成后结果会直接存储在bonus_1变量中,直接添加响应断言即可:
- 右键JDBC Request → 添加 → 断言 → 响应断言
- 测试字段选择「JMeter变量」,输入框填写
bonus_1 - 模式匹配规则选择「等于」
- 要测试的模式填写
0.2
方案2:JSR223断言遍历全量结果
如果你需要保留原查询语句全量返回结果,用JSR223断言遍历匹配即可:
- 右键JDBC Request → 添加 → 断言 → JSR223断言
- 语言选择
groovy,在脚本输入框填写以下代码:
// 获取查询结果总行数 int rowCount = vars.get("id_#") as int String actualBonus = "" // 遍历匹配username为john的记录 for (def i = 1; i <= rowCount; i++) { if (vars.get("username_" + i) == "john") { actualBonus = vars.get("bonus_" + i) break } } // 校验结果 if (actualBonus != "0.2") { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("校验失败:john对应的bonus实际值为" + actualBonus + ",预期值为0.2") }
内容的提问来源于stack exchange,提问作者NeelamS
相关产品推荐
相关产品推荐

