如何附加到 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。
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。