如何在groovy

时间:2017-05-27 08:49:53

标签: groovy soapui

我在groovy中遇到了一些关于数组的问题。我正在执行一个数据驱动的测试,我正在使用CSV,我正在迭代groovy脚本步骤。我想要做的是每次迭代我的肥皂请求,我应该收到两个航班ID。我想将两个航班ID的每一组放在一个数组中,因此数组应该继续在数组中添加航班ID:

示例:

After Iteration 1: [[123, 321]]
After Iteration 2: [[123.321. 454, 345]]

我遇到的问题是它没有添加到数组中,而是替换数组中已有的值。所以看起来如下:

After Iteration 1: [[123, 321]]
After Iteration 2: [[454, 345]] 

如何在数组中附加flightids?

以下是代码:

import groovy.xml.XmlUtil
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def response = context.expand( '${SOAP Request#Response}'  )
def parsedxml = new XmlSlurper().parseText(response)


def flights = parsedxml.'**'.findAll { it.name() == 'FlightId'}[[0],[1]]


def flightsarray = [];

flightsarray.push(flights)

context.setProperty('flights', flights)
context.setProperty('flightsarray', flightsarray)

log.error flightsarray.toString()

仅供参考我尝试用flightsarray.push(flights)替换flightsarray << flights,但它做同样的事情。

2 个答案:

答案 0 :(得分:1)

实际上.push(), << , +=几乎一样。

我认为您期望本地脚本变量flightsarray的问题将保留上次运行的值。但实际上它总是新的并且以空数组开始。

您可以将结果附加到脚本末尾的文件中。像这样:

new File("path to file").append("${flightsarray.join(',')}\n")

一种棘手的方式,可能会带来很多问题,如何以及何时重置或存储这些全局变量:

class Global{
    static def flightsarray=[]
}

Global.flightsarray.add(  new Date()  )

log.info(Global.flightsarray)

每次执行此脚本时,它都会在数组中添加越来越多的日期。

当你改变这个脚本时要小心 - 它将被重新编译,你将丢失其中的所有数据。

答案 1 :(得分:0)

我注意到你设置flightsarray之外的其他内容 context中的属性。

所以直观的解决方案是:开始下一次迭代 从上下文中读取flightsarray

可能你应该写:

def flightsarray = context.getProperty('flightsarray') ?: []

分解为步骤:

  • 声明变量
  • 尝试从上下文中为其分配相应的属性。
  • 如果没有读取任何内容,请指定一个空表。