如何对 JSON 数组(地图列表)中的数据进行排序并将它们导出到 excel/csv
How to sort data from a JSON ARRAY (list of maps) and export them to excel/csv
我有一个 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。报告应采用以下模式
1) 实现此目标的最短 groovy 代码是什么?
2) 如何导出数据到excel/csv?
我有这些可用的代码片段,但无法连接点
a) 获取唯一方法列表
listOfMap.METHOD.unique()
b) 获取每个方法的运行次数(这里我想遍历上面的输出)
listOfMap.count{ 地图 -> map.METHOD == 'CLICK'}
c) 从上面的列表中获取所有方法的失败计数
listOfMap.count { 地图 -> map.METHOD == 'CLICK' && map.RESULT == 'FAIL' }
现在我要计算:(每个方法的失败结果计数/每个方法的总运行次数 * 100)
像这样:
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"
我有一个 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。报告应采用以下模式
1) 实现此目标的最短 groovy 代码是什么?
2) 如何导出数据到excel/csv?
我有这些可用的代码片段,但无法连接点
a) 获取唯一方法列表 listOfMap.METHOD.unique()
b) 获取每个方法的运行次数(这里我想遍历上面的输出) listOfMap.count{ 地图 -> map.METHOD == 'CLICK'}
c) 从上面的列表中获取所有方法的失败计数 listOfMap.count { 地图 -> map.METHOD == 'CLICK' && map.RESULT == 'FAIL' }
现在我要计算:(每个方法的失败结果计数/每个方法的总运行次数 * 100)
像这样:
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"