diff --git a/Code/Tools/skipped_systemtests.py b/Code/Tools/skipped_systemtests.py new file mode 100755 index 0000000000000000000000000000000000000000..00f6a62828bb39c30d4cc1e0d524879d8472bc25 --- /dev/null +++ b/Code/Tools/skipped_systemtests.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python + +import ast +import datetime +import urllib + +URL = "http://builds.mantidproject.org/job/master_systemtests/" + + +class TestCase: + + def __init__(self, kwargs): + self.status = kwargs['status'] + if self.status == "REGRESSION": + self.status = "FAILED" + self.name = kwargs['name'] + + def __str__(self): + return self.name + + +def getLabel(url): + label = url.split('label=')[-1] + return label.split('/')[0:2] + + +def addTestResult(results, case, label): + case = str(case) + if case not in results: + results[case] = [label] + else: + results[case].append(label) + + +def printResultCell(mark, length): + if (mark): + left = int(length/2) + right = length-left-1 + print "%sx%s" % (' '*left, ' '*right), + else: + print ' '*(length), + print '|', + + +def generateTable(interesting, labels, heading): + if len(interesting) <= 0: + return + + print + print heading + print "-"*len(heading) + print + + # get the maximum test name length + tests = sorted(interesting.keys()) + maxlength = 0 + for test in tests: + if len(test) > maxlength: + maxlength = len(test) + maxlength += 2 + + # print out the heading line with separator + header = '| Test '+' '*(maxlength-5)+'|' + for label in labels: + header += ' '+label+' |' + print header + header = header.split('|') + header = ['-'*len(item) for item in header] + print '|'.join(header) + + # sort the tests so the least tested is first + ordered_tests = {} + for test in tests: + numSkip = len(interesting[test]) + if numSkip not in ordered_tests: + ordered_tests[numSkip] = [] + ordered_tests[numSkip].append(test) + tests = [] + for i in [len(labels)-i for i in xrange(len(labels))]: + if i in ordered_tests: + tests.extend(ordered_tests[i]) + + # print the table + for test in tests: + print '|', test, ' '*(maxlength-len(test)-2), '|', + for label in labels: + printResultCell(label in interesting[test], len(label)) + print + +url = URL+"lastCompletedBuild/testReport/api/python" +json = ast.literal_eval(urllib.urlopen(url).read()) + +skipped = {} +failed = {} + +for report in json["childReports"]: + (label, jobNum) = getLabel(report["child"]["url"]) + result = report["result"] + for case in result["suites"][0]["cases"]: + case = TestCase(case) + if case.status != "PASSED": + if case.status == "SKIPPED": + addTestResult(skipped, case, label) + elif case.status == "FAILED": + addTestResult(failed, case, label) + +# get the unique labels +labels = [] +for key in skipped.keys(): + for item in skipped[key]: + if item not in labels: + labels.append(item) +for key in failed.keys(): + for item in failed[key]: + if item not in labels: + labels.append(item) +labels.sort() + +# total tests +totalCount = int(json['totalCount']) + +# print out the yaml header so it gets parsed by jekyll +print '---' +print 'layout: default' +print 'date:', datetime.datetime.now().strftime("%Y-%m-%d") +print 'author: Peter Peterson' +print 'title: Currently Skipped System Tests' +print '---' + +print "Summary" +print "=======" +print +print "* Job : [%s](%s)" % (URL.split('/')[-2], URL), +print datetime.datetime.now().strftime("%Y-%m-%d"), +print "[#%s](%s%s/)" % (jobNum, URL, jobNum) +print "* Labels :", ', '.join(labels) +print "* Failed :", json['failCount'], +if len(failed.keys()) < 2: + print +else: + print "(%d unique)" % len(failed.keys()) +print "* Skipped:", json['skipCount'], +if len(skipped.keys()) < 2: + print +else: + print "(%d unique)" % len(skipped.keys()) +print "* Total :", totalCount, +print "(= %d * %d)" % (totalCount/len(labels), len(labels)) + +print + +print "Details" +print "=======" + +generateTable(failed, labels, "Failed") +generateTable(skipped, labels, "Skipped")