xref: /petsc/config/report_tests.py (revision 6d7e7da82203aeaca7d750895157b70025ba2ef5)
18ccd5183SScott Kruger#!/usr/bin/env python
28ccd5183SScott Krugerimport glob, os
38ccd5183SScott Krugerimport optparse
48ccd5183SScott Kruger"""
58ccd5183SScott KrugerQuick script for parsing the output of the test system and summarizing the results.
68ccd5183SScott Kruger"""
78ccd5183SScott Kruger
88ccd5183SScott Krugerdef summarize_results(directory):
98ccd5183SScott Kruger  ''' Loop over all of the results files and summarize the results'''
108ccd5183SScott Kruger  startdir=os.path.realpath(os.path.curdir)
11*6d7e7da8SJed Brown  try:
128ccd5183SScott Kruger    os.chdir(directory)
13*6d7e7da8SJed Brown  except OSError:
14*6d7e7da8SJed Brown    print('# No tests run')
15*6d7e7da8SJed Brown    return
168ccd5183SScott Kruger  summary={'total':0,'success':0,'failed':0,'failures':'','todo':0,'skip':0}
178ccd5183SScott Kruger  for cfile in glob.glob('*.counts'):
188ccd5183SScott Kruger    sh=open(cfile,"r"); fileStr=sh.read(); sh.close()
198ccd5183SScott Kruger    for line in fileStr.split('\n'):
208ccd5183SScott Kruger      if not line: break
218ccd5183SScott Kruger      try:
228ccd5183SScott Kruger        var,val=line.split()
238ccd5183SScott Kruger        if not val.strip(): continue
248ccd5183SScott Kruger        val=int(val)
258ccd5183SScott Kruger      except:
268ccd5183SScott Kruger        var=line.split()[0]
27a2766241SScott Kruger        lval=len(line.split())-1
28a2766241SScott Kruger        if lval==0: continue
29a2766241SScott Kruger        val=line.split()[1]
30a2766241SScott Kruger        if not val.strip(): continue
31a2766241SScott Kruger        append=" ("+str(lval)+"), " if lval>1 else ", "
32a2766241SScott Kruger        val=val+append
33a2766241SScott Kruger
348ccd5183SScott Kruger      summary[var]=summary[var]+val
358ccd5183SScott Kruger
3668f6ad6bSScott Kruger  print "\n# -------------"
3768f6ad6bSScott Kruger  print "#   Summary    "
3868f6ad6bSScott Kruger  print "# -------------"
39a2766241SScott Kruger  print "# FAILED "+summary['failures'].rstrip(', ')
408ccd5183SScott Kruger  total=str(summary['total'])
418ccd5183SScott Kruger
428ccd5183SScott Kruger  for t in "success failed todo skip".split():
438ccd5183SScott Kruger    percent=summary[t]/float(summary['total'])*100
442a90399fSSatish Balay    print ("# "+t+" "+ str(summary[t])+"/"+total+" tests (%3.1f%%)") % (percent)
458ccd5183SScott Kruger  return
468ccd5183SScott Kruger
478ccd5183SScott Krugerdef main():
488ccd5183SScott Kruger    parser = optparse.OptionParser(usage="%prog [options]")
498ccd5183SScott Kruger    parser.add_option('-d', '--directory', dest='directory',
508ccd5183SScott Kruger                      help='Directory containing results of petsc test system',
518ccd5183SScott Kruger                      default='counts')
528ccd5183SScott Kruger    options, args = parser.parse_args()
538ccd5183SScott Kruger
548ccd5183SScott Kruger    # Process arguments
558ccd5183SScott Kruger    if len(args) > 0:
568ccd5183SScott Kruger      parser.print_usage()
578ccd5183SScott Kruger      return
588ccd5183SScott Kruger
59*6d7e7da8SJed Brown    summarize_results(options.directory)
608ccd5183SScott Kruger
618ccd5183SScott Krugerif __name__ == "__main__":
628ccd5183SScott Kruger        main()
63