另一个关于使用SoapUI和Property Transfer的XPath结构 - 嵌套重复标记

时间:2018-03-20 03:15:48

标签: testing xpath properties soapui transfer

还有一个问题。 这次我想是因为标签在同一个消息中使用了两次,嵌套了。

我在检索具有唯一标签的其他项目(例如requestDateTimestatusDateTimecompletedStateEnteredDate)时没有问题,但我无法成功获取<som>参考号,或状态(内部状态)或类型(再次,在另一个<type>标记内)。

所以我知道我的命名空间有效,只是无法弄清楚如何获取我需要的数据。 具体来说,我需要在<som>6000526</som>部分中捕获该数值。数据确实会返回多个SOM数字,所以奖金将是我如何捕获多个(如前2或5会很酷)。

<return>
    <success>true</success>
    <networkUpdateList>
       <confirmationDue>
          <actualDays>26</actualDays>
          <actualHours>11</actualHours>
          <actualMinutes>57</actualMinutes>
          <businessDays>22</businessDays>
          <businessHours>7</businessHours>
          <businessMinutes>57</businessMinutes>
          <negative>true</negative>
       </confirmationDue>
       <confirmingCarrierId>11567</confirmingCarrierId>
       <numbers>
          <donorCarrierId>11657</donorCarrierId>
          <gainingCarrierId>11667</gainingCarrierId>
          <losingCarrierId>11657</losingCarrierId>
          <number>
             <phoneNumber>098453520</phoneNumber>
          </number>
       </numbers>
       <som>
          <requestDateTime>2017-04-11T10:08:01+12:00</requestDateTime>
          <som>6000526</som>
          <status>
             <status>GC and LC Complete</status>
          </status>
          <statusDateTime>2017-04-11T10:09:09+12:00</statusDateTime>
          <type>
             <type>Port</type>
          </type>
          <completedStateEnteredDate>2017-04-11T10:09:09+12:00</completedStateEnteredDate>
       </som>
    </networkUpdateList>

3 个答案:

答案 0 :(得分:2)

使用此XPath表达式获得所需的结果:

/return/networkUpdateList/som/som

<强>结果:

<som>6000526</som>

这甚至适用于不同<som>个节点的多个networkUpdateList元素子项。

答案 1 :(得分:0)

我错开了解决方案,适用于所有重复的名称:
// som / som完成这项工作 就像//状态/状态和//类型/类型一样,所以我是一个快乐的露营者。 我只是不知道如何在响应中找到下一个事件,但我并不急需,我可以循环。
编辑:还发现了 (//som/som) [2]
返回第二次出现,那个(// som / som)[1]返回第一个,等等。很简单,很有把握。
在这里发现:https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx

答案 2 :(得分:0)

创建脚本断言并使用以下代码:

// create groovyUtils and XmlHolder for response of Request 1 request
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def holder = groovyUtils.getXmlHolder( "SOAP Request#Response" )

// loop item nodes in response message
for( item in holder.getNodeValues( "//som/som" ))
    log.info "Item : [$item]" 

这应该打印出XPath之后的每个节点的所有值。在脚本中,Assertion Log应按以下格式输出:

  

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[0.69]

     

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[4.14]

     

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[0.69]

     

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[0.69]

     

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[1.6]

     

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[3.45]

     

Wed Mar 21 14:46:14 GMT 2018:INFO:Item:[1.85]