Groovy 对提取的匹配节点值求和,并将其传输到下一个响应

Groovy 对提取的匹配节点值求和,并将其传输到下一个响应,groovy,soapui,Groovy,Soapui,我们正在使用开源的SoapUI,并试图从响应中得到一些计算结果 这是我们从请求中得到的示例响应 <Response> <PropertyDef> <Property1> <e> <Name>Prop1-1</Name> <ID>1</ID> </e> <e>

我们正在使用开源的SoapUI,并试图从响应中得到一些计算结果

这是我们从请求中得到的示例响应

<Response>
  <PropertyDef>
    <Property1>
        <e>
            <Name>Prop1-1</Name>
            <ID>1</ID>
        </e>
        <e> 
            <Name>Prop1-2</Name>
            <ID>2</ID>
        </e>
    </Property1>
    <Property2>
        <e>
            <Name>Prop2-1</Name>
            <ID>11</ID>
        </e>
        <e> 
            <Name>Prop2-2</Name>
            <ID>22</ID>
        </e>
    </Property2>
  </PropertyDef>
  <Propertyvalues>
   <e>
     <value1>3.0</value1>
      <references>
        <prop1>1</prop1>
        <prop2>11</prop2>
      </references>
      <value2>5</value2>
    </e>
    <e>
     <value1>4.0</value1>
      <references>
        <prop1>1</prop1>
        <prop2>22</prop2>
      </references>
      <value2>4</value2>
    </e>
    <e>
     <value1>6.0</value1>
      <references>
        <prop1>2</prop1>
        <prop2>11</prop2>
      </references>
      <value2>1</value2>
    </e>
  </Propertyvalues>

</Response>

Prop1-1
1.
Prop1-2
2.
Prop2-1
11
Prop2-2
22
3
1.
11
5.
4
1.
22
4.
6
2.
11
1.
基于这个响应,假设我需要找到prop2值为11的所有属性值。这将有两个属性值

<e>
      <value1>3.0</value1>
      <references>
        <prop1>1</prop1>
        <prop2>11</prop2>
      </references>
      <value2>5</value2>
</e>
<e>
      <value1>6.0</value1>
      <references>
        <prop1>2</prop1>
        <prop2>11</prop2>
      </references>
      <value2>1</value2>
</e>

3
1.
11
5.
6
2.
11
1.
现在我们需要得到这个集合中的value1s之和,并将其设置为一个属性,以便在不同的请求中使用。在这个例子中,我需要得到6+3=9,并根据响应设置为属性。请问有没有办法


对于相同的REST请求,请使用下面的脚本断言

以获得任何帮助。在线评论:

//定义以下内容;如果需要,请编辑。
def expectedProp2Value=11
def expectedKeyName='prop2'
def keyNameToSum='value1'
//将响应传递给parseText方法
def pxml=new XmlSlurper().parseText(context.response)
//找到所有匹配元素e;
def alles=pxml.'**'.findAll{it.name()==expectedKeyName&&it==expectedProp2Value}*.parent()*.parent()
//求和
def result=alles.collect{it.$keyNameToSum.text()作为float}.sum()
log.info“值的总和:$result”
//如果您想在下一次请求中使用上述金额;下面使用
context.testCase.setPropertyValue('SUM',result.toString())
您可以在线尝试相同的方法(在求和部分之前,rest是特定于soapui的)

在下一个请求中,在需要上述和的地方使用下面的属性扩展。例如:


${#TestCase#SUM}

您检查解决方案了吗?如果你能接受它,并将其作为有效的解决方案,你将不胜感激。