From: Anna Kogan Date: Thu, 7 Feb 2013 12:29:28 +0000 (+0400) Subject: Added --failed-only option and multiple input files support X-Git-Tag: accepted/2.0/20130307.220821~113^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=51e58aeb25e495c08782f4de509384aa29c67a6b;p=profile%2Fivi%2Fopencv.git Added --failed-only option and multiple input files support --- diff --git a/modules/ts/misc/perf_tests_timing.py b/modules/ts/misc/perf_tests_timing.py index 721c0e3..d082f9c 100644 --- a/modules/ts/misc/perf_tests_timing.py +++ b/modules/ts/misc/perf_tests_timing.py @@ -15,115 +15,145 @@ if __name__ == "__main__": help = "output results in text format (can be 'txt', 'html' or 'auto' - default)", metavar = 'FMT', default = 'auto') + parser.add_option("--failed-only", action = "store_true", dest = "failedOnly", + help = "print only failed tests", default = False) + (options, args) = parser.parse_args() - if 1 != len(args): - parser.print_help() - exit(0) options.generateHtml = detectHtmlOutputType(options.format) - input_file = args[0] - file = os.path.abspath(input_file) - if not os.path.isfile(file): - sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep) - parser.print_help() - exit(0) - - test_sets = [] - try: - tests = testlog_parser.parseLogFile(file) - if tests: - test_sets.append((os.path.basename(file), tests)) - except IOError as err: - sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep) - except xml.parsers.expat.ExpatError as err: - sys.stderr.write("ExpatError reading \"" + file + "\" - " + str(err) + os.linesep) - - if not test_sets: - sys.stderr.write("Error: no test data found" + os.linesep) - exit(0) - - # find matches - setsCount = len(test_sets) - test_cases = {} - - name_extractor = lambda name: str(name) - - for i in range(setsCount): - for case in test_sets[i][1]: - name = name_extractor(case) - if name not in test_cases: - test_cases[name] = [None] * setsCount - test_cases[name][i] = case - - testsuits = [] # testsuit name, time, num, flag for failed tests - + files = [] + testsuits = [] # testsuit module, name, time, num, flag for failed tests overall_time = 0 - prevGroupName = None - suit_time = 0 - suit_num = 0 - fails_num = 0 - for name in sorted(test_cases.iterkeys(), key=alphanum_keyselector): - cases = test_cases[name] - - groupName = next(c for c in cases if c).shortName() - if groupName != prevGroupName: - if prevGroupName != None: - suit_time = suit_time/60 #from seconds to minutes - testsuits.append({'name': prevGroupName, 'time': suit_time, \ - 'num': suit_num, 'failed': fails_num}) - overall_time += suit_time - suit_time = 0 - suit_num = 0 - fails_num = 0 - prevGroupName = groupName - - for i in range(setsCount): - case = cases[i] - if not case is None: - suit_num += 1 - if case.get('status') == 'run': - suit_time += case.get('time') - if case.get('status') == 'failed': - fails_num += 1 - - testsuits.append({'name': prevGroupName, 'time': suit_time, \ - 'num': suit_num, 'failed': fails_num}) + + seen = set() + for arg in args: + if ("*" in arg) or ("?" in arg): + flist = [os.path.abspath(f) for f in glob.glob(arg)] + flist = sorted(flist, key= lambda text: str(text).replace("M", "_")) + files.extend([ x for x in flist if x not in seen and not seen.add(x)]) + else: + fname = os.path.abspath(arg) + if fname not in seen and not seen.add(fname): + files.append(fname) + + file = os.path.abspath(fname) + if not os.path.isfile(file): + sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep) + parser.print_help() + exit(0) + + fname = os.path.basename(fname) + find_module_name = re.search(r'([^_]*)', fname) + module_name = find_module_name.group(0) + + test_sets = [] + try: + tests = testlog_parser.parseLogFile(file) + if tests: + test_sets.append((os.path.basename(file), tests)) + except IOError as err: + sys.stderr.write("IOError reading \"" + file + "\" - " + str(err) + os.linesep) + except xml.parsers.expat.ExpatError as err: + sys.stderr.write("ExpatError reading \"" + file + "\" - " + str(err) + os.linesep) + + if not test_sets: + continue + + # find matches + setsCount = len(test_sets) + test_cases = {} + + name_extractor = lambda name: str(name) + + for i in range(setsCount): + for case in test_sets[i][1]: + name = name_extractor(case) + if name not in test_cases: + test_cases[name] = [None] * setsCount + test_cases[name][i] = case + + prevGroupName = None + suit_time = 0 + suit_num = 0 + fails_num = 0 + for name in sorted(test_cases.iterkeys(), key=alphanum_keyselector): + cases = test_cases[name] + + groupName = next(c for c in cases if c).shortName() + if groupName != prevGroupName: + if prevGroupName != None: + suit_time = suit_time/60 #from seconds to minutes + testsuits.append({'module': module_name, 'name': prevGroupName, \ + 'time': suit_time, 'num': suit_num, 'failed': fails_num}) + overall_time += suit_time + suit_time = 0 + suit_num = 0 + fails_num = 0 + prevGroupName = groupName + + for i in range(setsCount): + case = cases[i] + if not case is None: + suit_num += 1 + if case.get('status') == 'run': + suit_time += case.get('time') + if case.get('status') == 'failed': + fails_num += 1 + + # last testsuit processing + suit_time = suit_time/60 + testsuits.append({'module': module_name, 'name': prevGroupName, \ + 'time': suit_time, 'num': suit_num, 'failed': fails_num}) + overall_time += suit_time if len(testsuits)==0: - print 'No testsuits found' exit(0) tbl = table() + rows = 0 + + if not options.failedOnly: + tbl.newColumn('module', 'Module', align = 'left', cssclass = 'col_name') + tbl.newColumn('name', 'Testsuit', align = 'left', cssclass = 'col_name') + tbl.newColumn('time', 'Time (min)', align = 'center', cssclass = 'col_name') + tbl.newColumn('num', 'Num of tests', align = 'center', cssclass = 'col_name') + tbl.newColumn('failed', 'Failed', align = 'center', cssclass = 'col_name') + + # rows + for suit in sorted(testsuits, key = lambda suit: suit['time'], reverse = True): + tbl.newRow() + tbl.newCell('module', suit['module']) + tbl.newCell('name', suit['name']) + tbl.newCell('time', formatValue(suit['time'], '', ''), suit['time']) + tbl.newCell('num', suit['num']) + if (suit['failed'] != 0): + tbl.newCell('failed', suit['failed']) + else: + tbl.newCell('failed', ' ') + rows += 1 - # header - tbl.newColumn('name', 'Testsuit', align = 'left', cssclass = 'col_name') - tbl.newColumn('time', 'Time (min)', align = 'center', cssclass = 'col_name') - tbl.newColumn('num', 'Num of tests', align = 'center', cssclass = 'col_name') - tbl.newColumn('failed', 'Failed', align = 'center', cssclass = 'col_name') - - # rows - for suit in sorted(testsuits, key = lambda suit: suit['time'], reverse = True): - tbl.newRow() - tbl.newCell('name', suit['name']) - tbl.newCell('time', formatValue(suit['time'], '', ''), suit['time']) - tbl.newCell('num', suit['num']) - if (suit['failed'] != 0): - tbl.newCell('failed', suit['failed']) - else: - tbl.newCell('failed', ' ') + else: + tbl.newColumn('module', 'Module', align = 'left', cssclass = 'col_name') + tbl.newColumn('name', 'Testsuit', align = 'left', cssclass = 'col_name') + tbl.newColumn('failed', 'Failed', align = 'center', cssclass = 'col_name') + + # rows + for suit in sorted(testsuits, key = lambda suit: suit['time'], reverse = True): + if (suit['failed'] != 0): + tbl.newRow() + tbl.newCell('module', suit['module']) + tbl.newCell('name', suit['name']) + tbl.newCell('failed', suit['failed']) + rows += 1 # output table - if options.generateHtml: - tbl.htmlPrintTable(sys.stdout) - htmlPrintFooter(sys.stdout) - else: - input_file = re.sub(r'^[\.\/]*', '', input_file) - find_module_name = re.search(r'([^_]*)', input_file) - module_name = find_module_name.group(0) - - splitter = 15 * '*' - print '\n%s\n %s\n%s\n' % (splitter, module_name, splitter) - print 'Overall time: %.2f min\n' % overall_time - tbl.consolePrintTable(sys.stdout) - print 4 * '\n' \ No newline at end of file + if rows: + if options.generateHtml: + tbl.htmlPrintTable(sys.stdout) + htmlPrintFooter(sys.stdout) + else: + if not options.failedOnly: + print '\nOverall time: %.2f min\n' % overall_time + tbl.consolePrintTable(sys.stdout) + print 2 * '\n' \ No newline at end of file