如何计算通过/失败结果以及打印通过和失败的次数

时间:2019-04-23 08:57:12

标签: java logging counter

如何计算和打印日志文件中最后一列中的失败和通过测试的数量

boolean globalRet = true;

for (boolean anArrRet : arrRet) {
    if (!anArrRet) {
        globalRet = false; 
        break;
    }
}

if (globalRet) {
    logLine += cnd.getLineLastAll() + "PASS,NA\n";
} else {
    logLine += cnd.getLineLastAll() + "FAIL,";

    for (int i = 0; i < arrRet.length; i++) {
        if (!arrRet[i]) {
            logLine += arrCondition[i] + "&";
        }
    } 

    logLine += "\n";
}

我正在使用的数据文件看起来像

CO2, Conditions
2.0, CEC_P=NA & CPH_P=NA & C_P=NA & H_P=NA 
5.5, CNA=NA 

我的日志文件看起来像在第二行中看到的那样,条件2已通过且2失败,但是我不将已通过的条件打印到日志文件中

 CO2,  Result, Reason
  2.0   FAIL,   CEC_P=NA & CPH_P=NA
  5.5   PASS,   NA

因此,失败的原因可能不止一个原因,而原因又由&

分开

现在我要在日志文件中获取的内容应该是这样

CO2,  Result, Reason               Passed, Failed
2.0   FAIL,   CEC_P=NA & CPH_P=NA  2,      2
5.5   PASS,   NA                   1,      0

1 个答案:

答案 0 :(得分:0)

如果您使用的是Unix系统,则以下命令可以满足您的需要(在Java代码之外,并假设PASS / FAIL字符串位于日志文件的最后一列):

awk '{print $NF}' your_log_file | sort | uniq -c

示例输出:

  2 FAIL
  5 PASS

或者,下面的简单Java代码可以逐行读取文件,并计算每行中“ FAIL”或“ PASS”字符串的出现次数并打印结果:

BufferedReader reader;
int fail = 0;
int pass = 0;            
try {
    reader = new BufferedReader(new FileReader(
          "path\\to\\your\\log_file"));
    String line = reader.readLine();
    while (line != null) {
         if (line.contains("FAIL")) fail++;
         if (line.contains("PASS")) pass++;
         line = reader.readLine();
    }
    reader.close();
} catch (IOException e) {e.printStackTrace();}                
System.out.println("Number of PASS in file : " + pass);
System.out.println("Number of FAIL in file : " + fail);