我试图从SoapUI响应中获取一些数据以生成新的SoapUI请求。这是我在输入中的反应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetDataResponse>
<return>
<dataType1>
<img>...</img>
</dataType1>
<dataType1>
<img>...</img>
</dataType1>
<dataType1>
<img>...</img>
</dataType1>
<dataType2>
<date1>2018-01-30T00:00:00.000+01:00</date1>
<img>...</img>
</dataType2>
<dataType2>
<date1>2018-01-30T00:00:00.000+01:00</date1>
<img>...</img>
</dataType2>
<dataType3>
</dataType3>
</return>
</GetDataResponse>
</soap:Body>
</soap:Envelope>
我想要生成的输出是:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<process>
<workflow1>
<dataType1>
<img>...</img>
</dataType1>
<dataType1>
<img>...</img>
</dataType1>
<dataType1>
<img>...</img>
</dataType1>
<dataType2>
<date1>2018-01-30T00:00:00.000+01:00</date1>
<date2>2018-01-30T00:00:00.000+01:00</date2>
<img>...</img>
</dataType2>
<dataType2>
<date1>2018-01-30T00:00:00.000+01:00</date1>
<date2>2018-01-30T00:00:00.000+01:00</date2>
<img>...</img>
</dataType2>
<otherFields>
<field/>
<field/>
<field/>
</otherFields>
</process>
</workflow1>
</soap:Body>
</soap:Envelope>
使用SoapUI groovy脚本我能够使用以下代码将我想要的数据从响应中复制到请求中:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def responseHolder = groovyUtils.getXmlHolder( "Step1#Response" )
def requestHolder = groovyUtils.getXmlHolder( "Step2#Request" )
// Remove all dataType1 from the request dom
for( item in requestHolder.getDomNodes( "//process/workflow1/dataType1" )){
requestHolder.removeDomNodes("//"+item.nodeName)
}
// Remove all dataType2 from the request dom
for( item in requestHolder.getDomNodes( "//process/workflow1/dataType2" )){
requestHolder.removeDomNodes("//"+item.nodeName)
}
def parentNode = requestHolder.getDomNode("//process/workflow1")
def otherFields = requestHolder.getDomNode("//process/workflow1/otherFields")
// Copy dataType1 into the request dom
for( item in responseHolder.getDomNodes( "//return/dataType1" )){
def newNode = parentNode.getOwnerDocument().importNode(item,true)
parentNode.insertBefore(newNode,otherFields)
}
// Copy dataType2 into the request dom
for( item in responseHolder.getDomNodes( "//return/dataType2" )){
def newNode = parentNode.getOwnerDocument().importNode(item,true)
parentNode.insertBefore(newNode,otherFields)
}
for( item in requestHolder.getDomNodes( "//process/workflow1/dataType2" )){
// Copy //process/workflow1/dataType2/date1 to //process/workflow1/dataType2/date2
}
// Update the request
requestHolder.updateProperty()
context.requestContent = requestHolder.xml
但是现在,我想将dataType2.date1复制到一个名为dataType2.date2的新节点,我无法做到。 我不知道如何在date1之后复制和插入这个新节点。我试图使用item来获取子节点,但我尝试的每个函数都没有定义,或者我使用的对象不是好的...
任何帮助?