JMeter中如何实现JSON响应元素与数据库数据的匹配校验
JMeter JSON响应与数据库数据校验解决方案
首先完成基础配置,才能开展后续校验操作:
- 新增JDBC Connection Configuration元件,配置对应数据库的驱动类、连接地址、账号密码、连接池名称等参数,完成数据库连接配置
- 新增JDBC Request采样器,选择上述配置的连接池,执行查询语句
SELECT StudentID, StudentName, StudentAddress FROM student,设置变量前缀为stu_db,查询结果会自动按行存储为stu_db_字段名_行号格式的JMeter变量,比如第一行的StudentID会存为stu_db_StudentID_1 - 正常配置HTTP请求采样器调用目标接口,获取JSON响应
问题1:完整JSON响应与对应数据库数据的匹配校验
因为两边字段名不统一,推荐使用JSR223断言(Groovy语言,性能优于其他脚本语言)实现字段映射校验,步骤如下:
- 给HTTP请求添加JSR223 Assertion元件,语言选择
groovy - 填入以下校验脚本,可直接适配当前的字段映射规则:
// 解析接口返回的JSON响应 def respJson = new groovy.json.JsonSlurper().parse(prev.getResponseData()) // 配置数据库字段和接口响应字段的映射关系 def fieldMap = [ "StudentID": "StudentNumber", "StudentName": "StuName", "StudentAddress": "StuAddress" ] def errorMsg = [] // 遍历校验所有字段 fieldMap.each { dbField, respField -> def dbVal = vars.get("stu_db_${dbField}_1").trim() def respVal = respJson[respField].toString().trim() if (dbVal != respVal) { errorMsg << "字段${respField}不匹配:数据库值为【${dbVal}】,接口返回值为【${respVal}】" } } // 存在不匹配项则标记断言失败 if (errorMsg) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("全量字段校验失败:\n" + errorMsg.join("\n")) }
如果需要校验多行数据,只需要修改脚本里的行号下标(比如stu_db_StudentID_2对应第二行数据),或者加循环遍历stu_db_#(总行数变量)即可。
问题2:StudentID=1时StudentNumber必须等于"A"的校验
不需要新增额外脚本,直接在上述JSR223断言的脚本末尾追加以下逻辑即可,单个脚本就能完成所有校验:
// 追加指定规则校验 def checkStuId = vars.get("stu_db_StudentID_1").trim() if (checkStuId == "1") { def respStuNum = respJson.StudentNumber.toString().trim() if (respStuNum != "A") { AssertionResult.setFailure(true) def ruleErr = "\n规则校验失败:StudentID=1时StudentNumber应为【A】,实际返回为【${respStuNum}】" AssertionResult.setFailureMessage(AssertionResult.getFailureMessage() + ruleErr) } }
如果不想用脚本,也可以用组件组合实现:先通过JSON提取器把接口返回的StudentNumber提取为变量${resp_stu_num},再添加If控制器,判断条件写"${stu_db_StudentID_1}" == "1",在If控制器下新增响应断言,校验${resp_stu_num}等于"A"即可。
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

