xref: /petsc/config/report_tests.py (revision c687a8700ec96ac94f37d32e6ad95ed55955e62f)
18ccd5183SScott Kruger#!/usr/bin/env python
291bc3e46SScott Krugerimport glob, os, re
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)
116d7e7da8SJed Brown  try:
128ccd5183SScott Kruger    os.chdir(directory)
136d7e7da8SJed Brown  except OSError:
146d7e7da8SJed Brown    print('# No tests run')
156d7e7da8SJed Brown    return
16100ef3c7SJed Brown  summary={'total':0,'success':0,'failed':0,'failures':[],'todo':0,'skip':0}
178ccd5183SScott Kruger  for cfile in glob.glob('*.counts'):
18100ef3c7SJed Brown    with open(cfile, 'r') as f:
19100ef3c7SJed Brown      for line in f:
20100ef3c7SJed Brown        l = line.split()
21100ef3c7SJed Brown        summary[l[0]] += l[1:] if l[0] == 'failures' else int(l[1])
22a2766241SScott Kruger
2391bc3e46SScott Kruger  failstr=' '.join(summary['failures'])
24100ef3c7SJed Brown  print("\n# -------------")
25100ef3c7SJed Brown  print("#   Summary    ")
26100ef3c7SJed Brown  print("# -------------")
271a3f486dSScott Kruger  if failstr.strip(): print("# FAILED " + failstr)
288ccd5183SScott Kruger
298ccd5183SScott Kruger  for t in "success failed todo skip".split():
308ccd5183SScott Kruger    percent=summary[t]/float(summary['total'])*100
31100ef3c7SJed Brown    print("# %s %d/%d tests (%3.1f%%)" % (t, summary[t], summary['total'], percent))
3291bc3e46SScott Kruger
33*c687a870SSatish Balay  if failstr.strip():
3491bc3e46SScott Kruger      fail_targets=(
3591bc3e46SScott Kruger          re.sub('(?<=[0-9]_\w)_.*','',
3691bc3e46SScott Kruger          re.sub('_1 ',' ',
3791bc3e46SScott Kruger          re.sub('-','-run',
3891bc3e46SScott Kruger          re.sub('cmd-','',
3991bc3e46SScott Kruger          re.sub('diff-','',failstr+' ')))))
4091bc3e46SScott Kruger          )
4191bc3e46SScott Kruger      # Need to make sure we have a unique list
4291bc3e46SScott Kruger      fail_targets=' '.join(list(set(fail_targets.split())))
4391bc3e46SScott Kruger      print("#\n# To rerun failed tests: ")
4491bc3e46SScott Kruger      print("#     make -f gmakefile.test test search='" + fail_targets.strip()+"'")
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
596d7e7da8SJed Brown    summarize_results(options.directory)
608ccd5183SScott Kruger
618ccd5183SScott Krugerif __name__ == "__main__":
628ccd5183SScott Kruger        main()
63