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