Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/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 "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")