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("# -------------") 27*1a3f486dSScott 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 3391bc3e46SScott Kruger fail_targets=( 3491bc3e46SScott Kruger re.sub('(?<=[0-9]_\w)_.*','', 3591bc3e46SScott Kruger re.sub('_1 ',' ', 3691bc3e46SScott Kruger re.sub('-','-run', 3791bc3e46SScott Kruger re.sub('cmd-','', 3891bc3e46SScott Kruger re.sub('diff-','',failstr+' '))))) 3991bc3e46SScott Kruger ) 4091bc3e46SScott Kruger # Need to make sure we have a unique list 4191bc3e46SScott Kruger fail_targets=' '.join(list(set(fail_targets.split()))) 4291bc3e46SScott Kruger print("#\n# To rerun failed tests: ") 4391bc3e46SScott Kruger print("# make -f gmakefile.test test search='" + fail_targets.strip()+"'") 448ccd5183SScott Kruger return 458ccd5183SScott Kruger 468ccd5183SScott Krugerdef main(): 478ccd5183SScott Kruger parser = optparse.OptionParser(usage="%prog [options]") 488ccd5183SScott Kruger parser.add_option('-d', '--directory', dest='directory', 498ccd5183SScott Kruger help='Directory containing results of petsc test system', 508ccd5183SScott Kruger default='counts') 518ccd5183SScott Kruger options, args = parser.parse_args() 528ccd5183SScott Kruger 538ccd5183SScott Kruger # Process arguments 548ccd5183SScott Kruger if len(args) > 0: 558ccd5183SScott Kruger parser.print_usage() 568ccd5183SScott Kruger return 578ccd5183SScott Kruger 586d7e7da8SJed Brown summarize_results(options.directory) 598ccd5183SScott Kruger 608ccd5183SScott Krugerif __name__ == "__main__": 618ccd5183SScott Kruger main() 62