Groovy 如何从CSV文件中选择随机行

Groovy 如何从CSV文件中选择随机行,groovy,Groovy,我想知道如何使用Groovy在CSV中选择一个随机行 目前我有两个groovy脚本(实际上有三个,但第三个对于这个问题并不重要)。一个groovy脚本称为“ReadData”,它读取csv文件并将其设置为第一行,然后还有另一个称为“SetProperties”的步骤,其中类似的语句将属性值设置为从csv获得的值 现在,下面的脚本可以在电子表格的第一列下查找CSV文件中的第二行,并将其设置为属性值。我的问题不是选择第二行,而是如何从电子表格中随机选择一行(我们从不从电子表格的第一行中选择,因为这是

我想知道如何使用Groovy在CSV中选择一个随机行

目前我有两个groovy脚本(实际上有三个,但第三个对于这个问题并不重要)。一个groovy脚本称为“ReadData”,它读取csv文件并将其设置为第一行,然后还有另一个称为“SetProperties”的步骤,其中类似的语句将属性值设置为从csv获得的值

现在,下面的脚本可以在电子表格的第一列下查找CSV文件中的第二行,并将其设置为属性值。我的问题不是选择第二行,而是如何从电子表格中随机选择一行(我们从不从电子表格的第一行中选择,因为这是我们的标题)

我确实尝试在SetProperties中替换:

testRunner.testCase.setPropertyValue( "id", singleLineArray[0])) 

但是没有运气,因为它出错了。

可能的解决方案 我从来没有使用过Groovy,所以请对此持保留态度,但它会让您更接近您想要的。这帮助了我:

Random random = new Random(); // initialize this somewhere once in your code
int randomRowId = 1 + random.nextInt(totalRecords); // Random integer between 1 and totalRecords (both inclusive).
testRunner.testCase.setPropertyValue('departureAirportId', DataTable[randomRowId][0]);
你的代码 第二个参数是:

String.valueOf( (int) Math.random() * singleLineArray[0] )

您仍然提取
singleLineArray
的第一个元素,并尝试将其与0到1之间的随机浮点相乘。这是为什么它不起作用。

删除Ruby标签,因为这与RuuyOy无关,你应该考虑使用合适的CSV PARSETIM再次进行救援,一旦我完成这个小问题,我会看看CSV解析器。谢谢,我也不太熟悉goovy脚本。这周才开始用。还可以,;我好像没法让它工作。数组“testRunner.testCase.setPropertyValue('departureAirportId',singleLineArray[randomRowId])的状态超出边界异常超出边界?奇怪的
totalRecords
的值是多少,
singleLineArray
的大小和
randomRowId
的值是多少?似乎无法记录数据。总记录数应为6(csv文件中为6行),singleLineArray应为1,且RandomRowId已更改。我得到的错误是java.lang.ArrayIndexOutOfBoundsException:5,但该值在1-5之间更改。抱歉,我感到困惑。它应该是
DataTable
,而不是
singleLineArray
。我认为
singleLineArray
是一个行数组。第18行是
testRunner.testCase.setPropertyValue('id',DataTable[randomRowId])
testRunner.testCase.setPropertyValue('departureAirportId', String.valueOf((int)Math.random()*singleLineArray[0]))
String.valueOf( (int) Math.random() * singleLineArray[0] )