如何将复杂数据类型从Groovy脚本添加到SoapUI中的响应

时间:2010-06-10 11:59:39

标签: groovy response extract soapui

我的问题是将数据元素(来自groovy脚本)放在SoapUI的响应中。 我有一系列数据,我想把它放在我的回复中(在不同的标签/元素中)


我知道要放一个这样的简单元素:

Xml响应中的元素“ MyName ”:

<ns:MyName>${MyName}</ns:MyName>

通过

从Groovy脚本映射
context.setProperty("MyName" , "My name" )

现在出现问题:

我的Xml响应如下所示:

   <soapenv:Body>
  <ns:GetDataSummaryResponse>
     <!--Optional:-->
     <ns:GetDataSummaryResult>
        <ns:DataSummary>
           <!--Zero or more repetitions:-->
           <ns:DataSummaryResponseDetail>
              <ns:Name>?</ns:Name>
              <!--Optional:-->
              <ns:DataProgress>
                 <!--Optional:-->
                 <From>?</From>
                 <!--Optional:-->
                 <Procent>?</Procent>
                 <!--Optional:-->
                 <To>?</To>
                 <!--Optional:-->

在Groovy中我构建了数据数组,其中填充了数据,例如:

context:[DataSummary:[DataSummaryResponseDetail:[Name:My  name, DataProgress:[From:some text, **Procent:some value**, To:some text]]]

在回复中,我能够看到${DataSummary}的全部价值,但我如何获得元素“ Procent

我对如何构建我的上下文数据可能有误,但可以自由调整!

2 个答案:

答案 0 :(得分:1)

我设法做了很多搜索。 首先,我需要在元素前面使用“=”才能获得类似的句柄 $ {= DataSummary [0]} 这适用于我之前显示的数据的顶层。

但是要真正解决问题,我在Groovy中创建了一个类,如下所示:

代码:全选     Class DataSummaryResponseDetail {     public String name     public DataProgress DataProgress = new DataProgress()     public Value [] value = new Value [2]     }     class DataProgress {     公共日期来自     公共日期     公共浮动Procent     }     class Value {     公共字符串货币     public int Amount     }

def hsrd = new DataSummaryResponseDetail()
hsrd.name = 'Some name'
hsrd.value[0]=new Value()
hsrd.value[0].Amount = 1000
hsrd.value[0].Currency = 'SEK'
hsrd.totalValue.Amount = 2000
hsrd.totalValue.Currency = 'USD' 

然后在响应xml中。我指的是这样的元素 $ {hsrd.value [0] .Amount} $ {= hsrd.totalValue.Amount}

def hsrd = new DataSummaryResponseDetail() hsrd.name ='某个名字' hsrd.value [0] =新值() hsrd.value [0] .Amount = 1000 hsrd.value [0] .Currency ='SEK' hsrd.totalValue.Amount = 2000 hsrd.totalValue.Currency ='USD'

问题解决了。如果您知道更好的方法,请告诉我。

答案 1 :(得分:0)

我没有使用SoapUI,但你试过这个:

${DataSummary.DataSummaryResponseDetail.DataProgress.Procent}

如果DataSummary是一个数组,您可以使用

访问第一个条目
${DataSummary[0].DataSummaryResponseDetail.DataProgress.Procent}

您可以使用方法each()迭代数组,所以

${DataSummary.each { it.DataSummaryResponseDetail.DataProgress.Procent }}

会给你所有参赛作品。