使用SoapUI-Groovy脚本从JSON响应提取子节点求助
在SoapUI中用Groovy提取JSON响应子节点的实用方法
嘿,作为刚接触SoapUI和Groovy的新手,我完全懂你想快速搞懂提取JSON子节点的心情!下面给你两种在SoapUI里最常用的方法,结合你的示例JSON来一步步演示:
方法1:用Groovy自带的JsonSlurper(灵活度拉满)
Groovy的JsonSlurper能把JSON字符串直接转成可操作的Groovy对象,之后用点语法或者键名就能轻松取到子节点,非常直观。
示例代码
// 1. 先拿到测试步骤的响应内容,记得替换成你实际的测试步骤名称 def responseContent = context.expand('${你的测试步骤名称#Response}') // 2. 初始化JsonSlurper并解析JSON def jsonParser = new groovy.json.JsonSlurper() def jsonData = jsonParser.parseText(responseContent) // 3. 提取你需要的子节点,用你的示例字段举例 def userId = jsonData.userId def userName = jsonData.name def employeeId = jsonData.employeeId def userRole = jsonData.role // 打印出来验证结果 log.info "提取到的用户ID: ${userId}" log.info "提取到的员工编号: ${employeeId}" log.info "提取到的用户角色: ${userRole}"
如果遇到嵌套的JSON结构,直接链式调用就行,比如jsonData.parentNode.childNode,非常方便。
方法2:用SoapUI自带的JSONPath(简洁高效)
SoapUI原生支持JSONPath语法,不用写太多Groovy代码就能精准定位节点,适合快速提取单个字段。
脚本中使用JSONPath的示例
// 获取响应内容 def responseContent = context.expand('${你的测试步骤名称#Response}') // 用JSONPath定位并提取字段 def dateOfBirth = new com.eviware.soapui.support.JsonPath().get(responseContent, '$.dateOfBirth') def isDeleted = new com.eviware.soapui.support.JsonPath().get(responseContent, '$.deleted') log.info "用户生日: ${dateOfBirth}" log.info "用户是否已删除: ${isDeleted}"
不用写脚本的快捷方式:属性转移
如果你不想写代码,还可以用SoapUI的属性转移功能:
- 右键目标测试步骤 → 新建 → 属性转移
- 源选择你的接口测试步骤,源路径填JSONPath(比如
$.userId) - 目标选择要存储值的位置(比如测试用例属性、全局属性)
- 运行属性转移就能自动把值提取过去啦
小提示
- 记得把代码里的
${你的测试步骤名称#Response}替换成你实际的测试步骤名称,比如${Get User Detail#Response} - 如果JSON里有数组,JSONPath可以用
$.[0].field取第一个元素的字段,Groovy里则用jsonData.arrayName[0].field - 遇到可能为
null的字段(比如你的示例里email),可以加个默认值避免空指针:def userEmail = jsonData.email ?: '未填写邮箱'
内容的提问来源于stack exchange,提问作者Ronak
相关产品推荐
相关产品推荐

