JMeter中通过JSR223断言对比数据库两列与单JSON元素的实现方法
前置操作(先完成数据库取值配置)
- 先添加JDBC Connection Configuration配置元件,填写你的数据库连接地址、账号、密码、驱动类,自定义一个变量名例如
customer_db,后续JDBC请求会复用这个连接池 - 新增JDBC Request取样器,Variable Name填写和上面一致的
customer_db,执行你的查询SQL获取目标行的两个字段:
取样器的「Result variable name」字段填SELECT `Customer ID`, `Customer number` FROM 你的表名 WHERE [你的查询匹配条件]customerResultSet,执行完查询后,数据库的返回结果会以List<Map>的结构存在这个变量里,每一行对应一个Map,键为列名、值为字段值 - 提前提取好待校验的
CustomerDetail变量(可以用JSON Extractor从接口响应提取,变量名就设为CustomerDetail即可)
JSR223断言编写
JSR223断言的语言选择groovy(性能远高于其他脚本语言,JMeter官方推荐),直接把以下代码贴入脚本区域即可:
import org.apache.jmeter.assertions.AssertionResult // 1. 取出数据库查询的第一行结果(如果你的查询返回多行可以自行调整索引) def dbRow = vars.getObject("customerResultSet")[0] // 2. 取出两个字段的值 def customerId = dbRow.get("Customer ID") def customerNumber = dbRow.get("Customer number") // 3. 取出待校验的CustomerDetail值 def actualDetail = vars.get("CustomerDetail") // 4. 按规则校验 def expectedValue = customerId != null ? customerId.toString() : customerNumber.toString() if (actualDetail != expectedValue) { AssertionResult result = new AssertionResult("CustomerDetail校验失败") result.setFailure(true) result.setFailureMessage("校验不通过,预期值为:" + expectedValue + ",实际值为:" + actualDetail) prev.addAssertionResult(result) prev.setSuccessful(false) }
数据库取值逻辑说明
通过vars.getObject()拿到之前存在customerResultSet里的结果集,取对应行的Map后直接用列名作为key就能获取两个字段的取值,数据库返回的NULL值在脚本中直接用!= null判断即可。校验不通过时会直接标记取样器失败,同时在结果树的断言信息里展示预期值和实际值,方便排查问题。
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

