SoapUI/Groovy:如何在同一DOM中复制节点并赋予新名称
解决SoapUI响应节点复制并重命名生成新请求的方案
嘿,我来帮你搞定这个SoapUI里的节点处理需求!咱们可以用SoapUI自带的Groovy脚本轻松实现——毕竟Groovy对XML操作天生友好,下面是具体的步骤和代码示例:
1. 先获取并解析响应XML
首先得把你的GetDataResponse响应内容拿出来,解析成可操作的XML对象:
// 替换成你实际的测试步骤名称 def response = context.expand('${你的测试步骤名#Response}') // 解析响应为XML对象 def xml = new XmlSlurper().parseText(response)
2. 复制指定节点并重命名
比如你要把所有dataType1节点复制一份,重命名为newDataType1,并添加到同一个DOM结构里:
// 遍历所有dataType1节点 xml.return.dataType1.each { originalNode -> // 在原节点的父节点下创建新命名的节点 def newNode = new groovy.xml.Node(originalNode.parent(), 'newDataType1') // 把原节点的子元素(比如<img>)完整复制到新节点中 originalNode.children().each { child -> newNode.append(child.clone()) } }
如果只需要复制单个特定节点(比如第一个dataType1),直接定位即可:
def originalNode = xml.return.dataType1[0] def newNode = new groovy.xml.Node(originalNode.parent(), 'newDataType1') originalNode.children().each { child -> newNode.append(child.clone()) }
3. 把修改后的XML转为请求格式
处理完DOM后,转成字符串并设置到目标请求步骤里:
// 将修改后的XML转为格式化字符串 def writer = new StringWriter() new groovy.xml.XmlNodePrinter(new PrintWriter(writer)).print(xml) def modifiedXml = writer.toString() // 替换成你要生成新请求的测试步骤名称 context.testCase.testSteps['目标请求步骤名'].setPropertyValue('Request', modifiedXml)
4. 额外小提示
- 如果响应里有命名空间(比如开头的
soap前缀),可以用declareNamespace指定命名空间,避免解析问题:def xml = new XmlSlurper().parseText(response).declareNamespace(soap: 'http://schemas.xmlsoap.org/soap/envelope/') - 要是需要处理
dataType2这类其他节点,只需要把代码里的节点名称替换成对应值就行。
这样操作下来,就能在同一DOM里完成节点复制重命名,直接生成符合要求的新SoapUI请求啦!
内容的提问来源于stack exchange,提问作者Alexa
相关产品推荐
相关产品推荐

