我有以下基本文件(试图使其尽可能小) 来自詹金斯夜间测试报告
{
"_class" : "hudson.tasks.junit.TestResult",
"testActions" : [
],
"duration" : 9408.876,
"empty" : false,
"failCount" : 4,
"passCount" : 147,
"skipCount" : 1040,
"suites" : [
{
"cases" : [
{
"testActions" : [
],
"age" : 0,
"className" : "Main testsuite 1",
"duration" : 17.281,
"errorDetails" : null,
"errorStackTrace" : null,
"failedSince" : 0,
"name" : "testcase 1.1",
"properties" : {
},
"skipped" : false,
"skippedMessage" : null,
"status" : "PASSED",
"stderr" : null,
"stdout" : null
},
{
"testActions" : [
],
"age" : 0,
"className" : "Main testsuite 1",
"duration" : 40.538,
"errorDetails" : null,
"errorStackTrace" : null,
"failedSince" : 0,
"name" : "testcase 1.2",
"properties" : {
},
"skipped" : false,
"skippedMessage" : null,
"status" : "PASSED",
"stderr" : null,
"stdout" : null
}
],
"duration" : 170.714,
"enclosingBlockNames" : [
"Blockname 1",
"Blockname 2"
],
"enclosingBlocks" : [
"52",
"25"
],
"id" : null,
"name" : "Main testsuite 1",
"nodeId" : "67",
"properties" : {
},
"stderr" : null,
"stdout" : null,
"timestamp" : null
},
{
"cases" : [
{
"testActions" : [
],
"age" : 0,
"className" : "Main testsuite 2",
"duration" : 17.781,
"errorDetails" : null,
"errorStackTrace" : null,
"failedSince" : 0,
"name" : "testcase 2.1",
"properties" : {
},
"skipped" : false,
"skippedMessage" : null,
"status" : "FIXED",
"stderr" : null,
"stdout" : null
},
{
"testActions" : [
],
"age" : 1,
"className" : "Main testsuite 2",
"duration" : 184.508,
"errorDetails" : "short error message",
"errorStackTrace" : "longer error message",
"failedSince" : 2410,
"name" : "testcase 2.2",
"properties" : {
},
"skipped" : false,
"skippedMessage" : null,
"status" : "FAILED",
"stderr" : null,
"stdout" : "Random pretty long error message"
}
],
"duration" : 215.862,
"enclosingBlockNames" : [
"Others",
"Blockname 2"
],
"enclosingBlocks" : [
"98",
"25"
],
"id" : null,
"name" : "Main testsuite 2",
"nodeId" : "113",
"properties" : {
},
"stderr" : null,
"stdout" : null,
"timestamp" : null
}
]
}
passCount
和 failCount
,包括值(仅显示一次)"status": "FAILED"
className, name, errorDetail, status
我设法制作了我的部分要求,但不是一次性全部制作完成,尤其是不是在 csv 文件中
请先修正输入数据。它包含两个
"className" : "className" : …
实例,这破坏了 JSON 有效性。
迭代数组项并构造相应的数组,然后使用
@csv
和 -r
标志创建 CSV 输出:
jq -r '
[.passCount, .failCount] + (
.suites[].cases[] | select(.status == "FAILED")
| [.className, .name, .errorDetails, .status]
) | @csv
'
147,4,"Main testsuite 2","testcase 2.2","short error message","FAILED"