如何从JSON ARRAY(地图列表)中对数据进行排序并将它们导出到excel / csv

时间:2018-01-25 23:07:16

标签: groovy groovyshell groovy-console

我有一个类似于:

的JSON数组(地图列表)
def listOfMap = [[TESTCASE:1, METHOD:'CLICK', RESULT:'PASS'], 
      [TESTCASE:2, METHOD:'CLICK', RESULT:'FAIL'], 
      [TESTCASE:3, METHOD:'CLICK', RESULT:'FAIL'], 
      [TESTCASE:4, METHOD:'TYPETEXT', RESULT:'FAIL']]

我想生成一个报告,在一列中包含唯一的方法名称,在另一列中生成%失败,并导出到csv / excel / html。报告应采用以下格式

Report :

1)实现这一目标的最短groovy代码是什么?
2)我们如何将数据导出到excel / csv?

我有这些代码段可用,但无法连接点

a)获取唯一方法列表 listOfMap.METHOD.unique()

b)获取每种方法的运行次数(这里我想循环上面的输出) listOfMap.count {map - > map.METHOD =='CLICK'}

c)从上面的列表中获取所有方法的失败计数 listOfMap.count {map - > map.METHOD =='CLICK'&& map.RESULT =='失败'}

现在我要计算:(每种方法的失败结果/每种方法的总运行数* 100)

1 个答案:

答案 0 :(得分:2)

这样的事情:

def percentage (map){
     (map.FAIL ?: 0) / ((map.PASS ?: 0) + (map.FAIL ?: 0)) * 100
}

def result = listOfMap.groupBy{it.METHOD}
                      .collectEntries{[(it.key) : percentage(it.value.countBy{it.RESULT})]}

def outputCsv = new File('/pathToReport/report.csv')
outputCsv.write "S.No;MethodName;Failture %\n"
result.eachWithIndex{ entry, index ->
   outputCsv << "${index+1};${entry.key};${entry.value}\n"