Groovy脚本:列表/映射集合
为了进行sprint测试,我创建了一个脚本,用于模拟SOAP UI中SOAP服务的行为(作为模拟服务),但在尝试迭代我创建的列表时遇到了问题。该列表由多个地图组成,每个地图都包含一个列表。它应该是这样的:Groovy脚本:列表/映射集合,groovy,Groovy,为了进行sprint测试,我创建了一个脚本,用于模拟SOAP UI中SOAP服务的行为(作为模拟服务),但在尝试迭代我创建的列表时遇到了问题。该列表由多个地图组成,每个地图都包含一个列表。它应该是这样的: [[Rec: 1, Items: ["AB123","BC234","CD345"]],[Rec: 2, Items: ["AB123","BC234","CD345","DE456"]]] 这是我必须建立列表的代码: def offerMap = [:] def outputL
[[Rec: 1, Items: ["AB123","BC234","CD345"]],[Rec: 2, Items: ["AB123","BC234","CD345","DE456"]]]
这是我必须建立列表的代码:
def offerMap = [:]
def outputList = []
def offerItemList = []
def outputMap = [:]
def outList = []
def item = ""
def rec = ""
offerItemList.add("AB123")
offerItemList.add("BC234")
offerItemList.add("CD345")
offerMap.put("Rec",1)
offerMap.put("Items",offerItemList)
outputList.add(offerMap)
log.info "OUT: outputList.size ${outputList.size()}"
log.info "OUT: offerItemList.size ${offerItemList.size()}"
offerMap.clear()
offerItemList.clear()
offerItemList.add("AB123")
offerItemList.add("BC234")
offerItemList.add("CD345")
offerItemList.add("DE456")
offerMap.put("Rec",2)
offerMap.put("Items",offerItemList)
outputList.add(offerMap)
log.info "OUT: outputList.size ${outputList.size()}"
log.info "OUT: offerItemList.size ${offerItemList.size()}"
这是我必须迭代列表的代码:
outputList.each {
log.info "OUT: outputList.size ${outputList.size()}"
outputMap.clear()
outputMap = it
rec = outputMap.get("Rec")
log.info "OUT: REC ${rec}"
outList.clear()
outList = outputMap.get("Items")
outList.each {
item = it
log.info "OUT: Item ${item}"
}
}
但这并没有给我预期的结果。第一个问题是输出列表。每个循环似乎立即跳转到列表中的第二个条目,从输出可以看出:
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 1
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: offerItemList.size 3
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 2
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: offerItemList.size 4
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 2
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: REC 2
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item AB123
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item BC234
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item CD345
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: Item DE456
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: outputList.size 2
Fri Nov 03 17:54:32 GMT 2017:INFO:OUT: REC null
我的想法越来越少,担心由于缺乏Groovy的经验,我可能会错过一些基本的东西。考虑以下几点。请注意,目标并不完全清楚,但这是一个有根据的猜测(在顶部示例中,Rec
与Row
之间也不清楚)
输出:
$ groovy Example.groovy
OUT ROW: 1
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT ROW: 2
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT Item: DE456
您正在添加列表,然后清除它并再次添加它。这是相同的清单。每次为每个元素创建一个新列表为什么不像问题中那样定义它呢<代码>[Rec:1,项:[“AB123”、“BC234”、“CD345”]],…等
您似乎需要根据收到的请求构建模拟服务响应。您介意显示输入和期望的输出吗?我的问题是,offerItemList列表是基于我正在执行的迭代动态构建的(示例中未显示以降低复杂性)。由于这个原因,我不能预先定义列表;我必须定义一个空的offerItemList,然后在迭代中继续添加它。一旦所有的项目(对于那个特定的迭代)被添加到offerItemList,我就想将offerItemList添加到offerMap,然后将offerMap添加到outputList。然后对下一组offer项重复这个过程……我想我理解了这个问题,当我将offerItemList添加到offerMap时,我添加的是一个指针,而不是列表的内容。类似地,当我向outputList添加offerMap时,我也添加了一个指针,而不是实际的映射内容(这就是为什么我在outputList中有两个完全相同的条目)。只需要了解我如何添加offerItemList/offerMap的内容,而不仅仅是指针……嗨,Michael,谢谢你花时间回复,非常感谢。对row/rec混乱表示歉意,将其从row更改为rec,但显然没有将其全部捕获,现已修复。我会尝试一下您的建议,再次感谢。我快速浏览了一下,认为这对我来说不合适,因为我正在动态构建offerItemList/offerMap(因此无法预先定义它们)。晒到绘图板上!你可能应该删除这个问题。最初不是100%清楚,现在也肯定不是了。那评论真的有必要吗?如果我的评论粗鲁,我道歉。堆栈溢出具有使web成为更好地方的精神。现在的问题是模糊的,你关于“动态”的评论似乎是一个新的要求。这篇文章对新读者有什么价值?如果人们(像我一样)花时间试图帮助你,却错过了评论/新要求,该怎么办?如果您仍然寻求帮助,则应澄清原始问题;否则考虑删除它。
$ groovy Example.groovy
OUT ROW: 1
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT ROW: 2
OUT Item: AB123
OUT Item: BC234
OUT Item: CD345
OUT Item: DE456