如何使用Groovy脚本动态从JDBC响应获取多值并写入Properties TestStep
动态提取JDBC响应字段写入Properties TestStep实现方案
你可以通过在JDBC步骤后新增Groovy脚本步骤实现需求,无需硬编码字段名,后续响应新增字段可自动识别写入:
操作步骤
- 在你的JDBC测试步骤后新增Groovy Script测试步骤
- 将以下代码粘贴到脚本编辑区,根据你的实际步骤名修改前两行的配置项:
// 配置项:替换为你项目中实际的JDBC测试步骤名称 def jdbcStepName = "JDBC_Query" // 配置项:替换为你项目中实际的Properties测试步骤名称 def targetPropStepName = "Properties" // 读取JDBC响应并解析XML def jdbcResponse = context.testCase.getTestStepByName(jdbcStepName).getResponseContent() def xmlParser = new XmlSlurper(false, false) def responseXml = xmlParser.parseText(jdbcResponse) // 获取目标Properties测试步骤对象 def propStep = context.testCase.getTestStepByName(targetPropStepName) // 遍历第一行结果的所有字段,自动写入Properties // 如需要保留多行结果,可替换为下方多行适配代码 responseXml.ResultSet.Row[0].childNodes().each { fieldNode -> def fieldName = fieldNode.name() def fieldValue = fieldNode.text() // 已存在的属性会覆盖值,不存在的属性会自动新增 propStep.setPropertyValue(fieldName, fieldValue) }
适配场景扩展
多返回行适配
如果你的JDBC查询会返回多行数据,用以下代码替换上面的字段遍历逻辑即可,会自动给每行属性加行号前缀避免覆盖:
responseXml.ResultSet.Row.eachWithIndex { rowNode, rowIndex -> rowNode.childNodes().each { fieldNode -> def fieldName = "row${rowIndex + 1}_${fieldNode.name()}" def fieldValue = fieldNode.text() propStep.setPropertyValue(fieldName, fieldValue) } }
注意事项
- 脚本中填写的步骤名需要和项目内实际步骤名完全一致,区分大小写
- 执行时按顺序运行JDBC步骤→Groovy脚本步骤即可完成属性同步
- 后续JDBC查询新增返回字段无需修改脚本,会自动识别写入Properties步骤
内容的提问来源于stack exchange,提问作者Arah
相关产品推荐
相关产品推荐

