2015-03-19 1 views
0

У меня проблема.Soap UI ad a Node to Request (Groovy)

Так я получил WSDL так:

 <node1> 
     <subnode1>data</subnode1> 
     <subnode2>data</subnode2> 

     <subnode3>data</subnode3> 
     <subnode4>data</subnode4> 

     <!--Zero or more repetitions:--> 
     <subnode5> 
      <subsubnode1>data</subsubnode1> 
      <subsubnode2>data</subsubnode2> 
      <subsubnode3>data</subsubnode3> 
     </subenode5> 
    </node1> 

для тестирования через SoapUI, проблема теперь, что subnode5 может иметь один или более чем reptions, это зависит от базы данных. Теперь мои вопросы - как можно изолировать это, чтобы сделать повторения динамическими.

так я стараюсь т добавьте subnode5 с помощью заводной сценария, как это:

import com.eviware.soapui.support.XmlHolder; 
import com.eviware.soapui.support.GroovyUtils; 

def groovyUtil = new GroovyUtils(context) 
def holder = groovyUtil.getXmlHolder("name#Request") 
def parentnode = holder.getDomNode("//node1") 

def text = ''' 
      <subnode5> 
      <subsubnode1>data</subsubnode1> 
      <subsubnode2>data</subsubnode2> 
      <subsubnode3>data</subsubnode3> 
      </subnode5> 
      '''.stripMargin() 

def nodetext = groovyUtil.getXMLHolder(text) 
def nodeItem = nodetext.getDomNode ("//subnode5") 
parentnode.appendChild(nodeItem, true) 
holder.updateProperty() 

но я получаю ErrorMessage:

groovy.lang.MissingMethodException: Нет подписи метода: org.apache. xmlbeans.impl.store.Xobj $ ElementXobj.appendChild() применим для типов аргументов: (org.apache.xmlbeans.impl.store.Xobj $ ElementXobj, java.lang.Boolean) значения: [? xml version = "1.0" encoding = "UTF-8"?>, ...] Возможные решения: appendChild (org.w3c.dom.Node) ошибка в строке: 29

то, что я буду добавлен новый ребенка к запросу

<node1> 
    <subnode1>data</subnode1> 
    <subnode2>data</subnode2> 

    <subnode3>data</subnode3> 
    <subnode4>data</subnode4> 

    <subnode5> 
     <subsubnode1>data</subsubnode1> 
     <subsubnode2>data</subsubnode2> 
     <subsubnode3>data</subsubnode3> 
    </subenode5> 
    --first repition-- 
    <subnode5> 
     <subsubnode1>data</subsubnode1> 
     <subsubnode2>data</subsubnode2> 
     <subsubnode3>data</subsubnode3> 
    </subenode5> 
    --second repition-- 
    <subnode5> 
     <subsubnode1>data</subsubnode1> 
     <subsubnode2>data</subsubnode2> 
     <subsubnode3>data</subsubnode3> 
    </subenode5> 
    .... and so on 
</node1> 

ответ

0

Вот дорожная карта - вам нужно будет настроить его в соответствии с вашими потребностями!

import com.eviware.soapui.support.GroovyUtils 

// create groovyUtils and XmlHolder for request 
def grUtils = new GroovyUtils(context) 
def requestHolder = grUtils.getXmlHolder("name#Request") 

// find the Node that I am interested in 
def requestNode = requestHolder.getDomNode("//*:node1") 
// the Document object is used to create new nodes 
def requestDoc = requestNode.getOwnerDocument() 

// create the whole structure 3 times 
3.times { 

    // create a new Element in the Document 
    def subelement5 = requestDoc.createElement("subnode5") 
    def subnode5 = requestNode.insertBefore(subelement5, requestNode.getFirstChild()) 

    // create the sub-sub nodes 
    1..3.each { 
     def subsubelement = requestDoc.createElement("subsubnode${it}") 
     subnode5.insertBefore(subsubelement, subnode5.getFirstChild()) 
     // add in the data text 
     subsubelement.appendChild(requestDoc.createTextNode("data")) 
    } 
} 

// write the Document out to the request 
requestHolder.updateProperty(true) 

Вот некоторые additional reading, если они заинтересованы.