2012-07-24 37 views
0

我是一个常规脚本编程的新手,并寻求您的帮助以找到我面临的问题的解决方案此时此刻。在sopaUI中使用Groovy脚本 - 将XML持有者的内容复制到另一个(尝试克隆SOAP请求测试步骤)

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

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

以下是我的TestSuite下我的TestSuite。

数据源 原始(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() 

当我执行上述常规脚本,经修改的请求被更新与原始请求中的内容一起使用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> 

我将不胜感激,如果有人可以帮助我。另外,我很乐意了解/学习其他常规方法来实现这一要求。

谢谢。

回答

1

考虑阅读Groovy XmlSlurperXmlParser。他们很容易实现,你可以使用它们进行xml操作。但是,对于您的特定要求,使用XmlParser会更有意义。

这是一个不同的问题和my answer,只是为了帮助你的XMLParser的是如何工作的

一个想法,因为你的问题更多的是删除节点少有关访问/验证它们。这里是SO上的other question关于使用XMlParser删除节点。

+1

谢谢Vamsi。非常感谢您的回复。将通读它。其实,我有两个部分符合我的要求。上述问题是要求的第一部分。我需要将soap请求的内容复制到另一个,然后在第二个节点上执行删除节点操作。对于后续迭代,必须将第一个soap请求(原始 - 不会更改)中的内容复制到第二个,并执行删除操作等等。希望它是有道理的。另一种方法是尝试克隆请求并对克隆的请求执行删除节点操作。 – 2012-07-24 09:40:27

相关问题