如何附加到 groovy 中的数组

how to append to an array in groovy

groovy 中的数组有点问题。我正在执行数据驱动测试,我正在使用 CSV 并迭代 groovy 脚本步骤。我想要做的是对于我的 soap 请求的每次迭代,我应该收到两个航班 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 << flights 替换 flightsarray.push(flights),但效果相同。

实际上.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)

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

更改此脚本时请当心 - 它将被重新编译,您将丢失其中的所有数据。

我注意到您设置了 flightsarray 属性 在 context.

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

也许你应该写:

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

分解为步骤:

  • 声明变量,
  • 尝试根据上下文为其分配相应的 属性。
  • 如果没有任何内容被读取,分配一个空的table。