在soapUI中使用Groovy脚本 - 将XML Holder的内容复制到另一个(尝试CLONE SOAP请求测试步骤)

时间:2012-07-24 07:08:48

标签: xml groovy soapui

我是一个groovy脚本的新手,并寻求你的帮助,以找到我目前面临的问题的解决方案。

我的要求是,在每次基于测试数据输入的迭代中,我将不得不从SoapRequest中删除特定节点或某些节点。为了实现这一点,我创建了两个相同的SOAP Request -Original和Modified。

使用groovy脚本我试图在每次迭代后使用原始soap请求的内容恢复修改后的soap请求的内容。 (迭代1 - 要删除的节点是在第二次迭代中要删除的节点保留 - 这是使用原始内容恢复请求的原因)。换句话说,希望克隆soap请求,以便可以对克隆的请求执行删除节点操作,保持原始请求不变。

以下是我的TestSuite下的Teststeps。

数据源 原创(SoapRequest) Groovy脚本。 修改(SoapRequest)

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脚本时,Modified请求会使用原始请求中的内容进行更新,但是使用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中的其他替代方法来实现这一要求。

谢谢。

1 个答案:

答案 0 :(得分:1)

考虑阅读Groovy XmlSlurperXmlParser。它们实现起来非常简单,您可以将它们用于xml操作。但是,根据您的特殊要求,使用XmlParser会更有意义。

这是一个不同的问题和my answer,只是为了帮助您了解XMLParser的工作原理

因为您的问题更多的是删除节点而不是访问/验证它们。以下是关于使用XMlParser删除节点的other question