You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter中通过JSR223断言对比数据库两列与单JSON元素的实现方法

前置操作(先完成数据库取值配置)
  • 先添加JDBC Connection Configuration配置元件,填写你的数据库连接地址、账号、密码、驱动类,自定义一个变量名例如customer_db,后续JDBC请求会复用这个连接池
  • 新增JDBC Request取样器,Variable Name填写和上面一致的customer_db,执行你的查询SQL获取目标行的两个字段:
    SELECT `Customer ID`, `Customer number` FROM 你的表名 WHERE [你的查询匹配条件]
    
    取样器的「Result variable name」字段填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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:36:01