如何基于Bash脚本生成的tests数组计算JSON的summary字段值?
用Bash结合jq计算测试JSON的summary字段值
要在Bash中完成JSON里summary字段四个值的计算,最便捷的方式是用jq工具(需提前安装),直接对已生成的含testname和tests数组的JSON进行处理。
核心计算逻辑(基于jq)
假设你的原始JSON文件为test_raw.json,执行以下命令即可生成包含完整summary字段的最终JSON:
jq ' # 计算临时变量:总测试数、成功数、失败数、总耗时 .total_tests = (.tests | length) | .success_count = ([.tests[] | select(.status == true)] | length) | .failed_count = (.total_tests - .success_count) | .total_duration = (.tests | map(.duration) | add) # 计算rating:成功数/总测试数,自动判断输出整数或浮点数 | .rating = (.success_count / .total_tests) | if . == floor(.) then . else . end # 构建summary字段并清理临时变量 | .summary = { success: .success_count, failed: .failed_count, rating: .rating, duration: .total_duration } | del(.total_tests, .success_count, .failed_count, .total_duration, .rating) ' test_raw.json > test_final.json
各字段计算说明
- success:筛选
tests数组中status为true的项,统计数量 - failed:用总测试数减去成功数,避免重复遍历数组提升效率
- rating:用成功数除以总测试数,通过判断是否等于自身整数部分,自动输出整数(如100%成功输出1)或浮点数(如成功6/10输出0.6)
- duration:提取所有测试用例的
duration值,求和得到总耗时
集成到现有脚本
如果你的Bash脚本是先生成基础JSON,可直接将生成结果管道到上述jq命令,比如:
# 假设你的现有脚本生成基础JSON的命令是generate_base_json generate_base_json | jq ' .total_tests = (.tests | length) | .success_count = ([.tests[] | select(.status == true)] | length) | .failed_count = (.total_tests - .success_count) | .total_duration = (.tests | map(.duration) | add) | .rating = (.success_count / .total_tests) | if . == floor(.) then . else . end | .summary = {success: .success_count, failed: .failed_count, rating: .rating, duration: .total_duration} | del(.total_tests, .success_count, .failed_count, .total_duration, .rating) ' > test_final.json
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

