我在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
,但它做同样的事情。
答案 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') ?: []
分解为步骤: