我是 groovy 脚本的新手,并寻求您的帮助以找到我目前面临的问题的解决方案。
我的要求是,在基于测试数据输入的每次迭代中,我必须从 SoapRequest 中删除一个或多个特定节点。为了实现这一点,我创建了两个相同的 SOAP 请求 - 原始和修改。
使用 groovy 脚本,我试图在每次迭代后使用原始soap请求的内容恢复修改后的soap请求的内容。(迭代 1 - 要删除的节点是,并且在第二次迭代中要删除的节点是保留 - 这是使用原始内容恢复请求的原因)。换句话说,想要克隆soap请求,以便可以对克隆的请求执行删除节点操作,保持原始请求不变。
以下是我的 TestSuite 下的测试步骤。
数据源原始 (SoapRequest) Groovy 脚本。修改(SoapRequest)
肥皂请求(原始)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
<soapenv:Header/>
<soapenv:Body>
<idm:request>
<idm:dataset-searches>
<idm:profile-name></idm:profile-name>
</idm:dataset-searches>
<idm:individual-name>
<idm:family-name>ABC</idm:family-name>
<idm:first-given-name>DEF</idm:first-given-name>
</idm:individual-name>
<idm:date-of-birth>1985-12-12</idm:date-of-birth>
</idm:request>
</soapenv:Body>
</soapenv:Envelope>
我的 Groovy 脚本如下
def grUtils = new com.eviware.soapui.support.GroovyUtils(context)
def ReqHolder2 = grUtils.getXmlHolder("Modified#Request")
ReqHolder2.removeDomNodes("//idm:request")
ReqHolder2.updateProperty()
ReqHolder2 ["//soapenv:Body"] = context.expand( '${Original#Request#//idm:request}' )
ReqHolder2.updateProperty()
当我执行上述 groovy 脚本时,修改后的请求将使用原始请求中的内容进行更新,但使用 CDATA 和对架构的引用。
SoapRequest(修改)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">
<soapenv:Header/>
<soapenv:Body>***<![CDATA[<idm:request xmlns:idm="http://vedaxml.com/vxml2/idmatrix-v2-0.xsd">***
<idm:dataset-searches>
<idm:profile-name/>
</idm:dataset-searches>
<idm:individual-name>
<idm:family-name>ABC</idm:family-name>
<idm:first-given-name>DEF</idm:first-given-name>
</idm:individual-name>
<idm:date-of-birth>1985-12-12</idm:date-of-birth>
</idm:request>**]]>**</soapenv:Body>
</soapenv:Envelope>
如果有人可以帮助我,我将不胜感激。另外,我很高兴知道/学习 groovy 中实现此要求的其他替代方法。
谢谢你。