soapui动态响应

vs91vp4v  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(361)

我需要找到动态生成soapui模拟响应的方法。我有一个请求示例(我们必须将重点放在listelem中的elem字段):
请求

<soapenv:Level1>
      <v1:listelem>
         <v2:elem>
            <v11:data1>?</v11:data1>
            <v11:data2>?</v11:data2>
         </v2:elem>
         <v2:elem>
            <v11:data1>?</v11:data1>
            <v11:data2>?</v11:data2>
         </v2:elem>
         <v2:elem>
            <v11:data1>?</v11:data1>
            <v11:data2>?</v11:data2>
         </v2:elem>
      </v1:listelem>
   </soapenv:Level1>

在我的请求中,我可以找到0到n个元素,我必须将这些数据转换成响应字段,如:response

<soapenv:Level1>
          <v1:OtherData>
          </v1:OtherData>
          <v1:EvenOtherData>
          </v1:EvenOtherData>
          <v1:listelem>
             <v2:elem>
                <v11:data1>?</v11:data1>
                <v11:data2>?</v11:data2>
                <v11:respose>?</v11:respose>
             </v2:elem>
             <v2:elem>
                <v11:data1>?</v11:data1>
                <v11:data2>?</v11:data2>
                <v11:respose>?</v11:respose>
             </v2:elem>
             <v2:elem>
                <v11:data1>?</v11:data1>
                <v11:data2>?</v11:data2>
                <v11:respose>?</v11:respose>
             </v2:elem>
          </v1:listelem>
       </soapenv:Level1>

如何创建n个节点(名为 element )在回应中?我必须在其他节点之后添加另一个节点。我试过用剧本来做,但没有成功。

1yjd4xko

1yjd4xko1#

我在示例中添加了namsespace声明。

<soapenv:Level1 xmlns:soapenv="1"  xmlns:v1="v1" xmlns:v2="v2" xmlns:v11="v11">

在soap模拟响应中尝试此脚本

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holderRequest = groovyUtils.getXmlHolder( mockRequest.requestContent )
def holderResponse = groovyUtils.getXmlHolder( mockResponse.responseContent )

listelemRequest =  holderRequest.getDomNode("//v1:listelem")
Level1Response =  holderResponse.getDomNode("//soapenv:Level1")
listelemResponse =  holderResponse.getDomNode("//v1:listelem")

//Coppy listelem from request to response
listelem = listelemResponse.getOwnerDocument().importNode(listelemRequest, true)
Level1Response.replaceChild(listelem,listelemResponse) 

//List nodes of elements
nodes =  holderResponse.getDomNodes("//v2:elem")

for(node in nodes){ 
    def nodeHolder  = groovyUtils.getXmlHolder("""<v11:response xmlns:v11="v11">?</v11:response>""")
    def itemNode = nodeHolder.getDomNode("//v11:response" )
    def responseElem = node.getOwnerDocument().importNode(itemNode,true)
    node.appendChild(responseElem)
}

mockResponse.setResponseContent(holderResponse.getXml())

脚本将listelem从请求复制到响应,并添加项“response”

相关问题