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
|
from urllib2 import Request, urlopen, URLError
import json
import jinja2
import os
installers = ["apex", "compass", "fuel", "joid"]
items = ["tests", "Success rate", "duration"]
PERIOD = 7
print "Generate Tempest automatic reporting"
for installer in installers:
# we consider the Tempest results of the last PERIOD days
url = "http://testresults.opnfv.org/test/api/v1/results?case=Tempest"
request = Request(url + '&period=' + str(PERIOD)
+ '&installer=' + installer + '&version=master')
try:
response = urlopen(request)
k = response.read()
results = json.loads(k)
except URLError, e:
print 'No kittez. Got an error code:', e
test_results = results['results']
test_results.reverse()
scenario_results = {}
criteria = {}
errors = {}
for r in test_results:
# Retrieve all the scenarios per installer
# In Brahmaputra use version
# Since Colorado use scenario
if not r['scenario'] in scenario_results.keys():
scenario_results[r['scenario']] = []
scenario_results[r['scenario']].append(r)
for s, s_result in scenario_results.items():
scenario_results[s] = s_result[0:5]
# For each scenario, we build a result object to deal with
# results, criteria and error handling
for result in scenario_results[s]:
result["start_date"] = result["start_date"].split(".")[0]
# retrieve results
# ****************
nb_tests_run = result['details']['tests']
nb_tests_failed = result['details']['failures']
if nb_tests_run != 0:
success_rate = 100*(int(nb_tests_run)
- int(nb_tests_failed))/int(nb_tests_run)
else:
success_rate = 0
result['details']["tests"] = nb_tests_run
result['details']["Success rate"] = str(success_rate) + "%"
# Criteria management
# *******************
crit_tests = False
crit_rate = False
crit_time = False
# Expect that at least 165 tests are run
if nb_tests_run >= 165:
crit_tests = True
# Expect that at least 90% of success
if success_rate >= 90:
crit_rate = True
# Expect that the suite duration is inferior to 30m
if result['details']['duration'] < 1800:
crit_time = True
result['criteria'] = {'tests': crit_tests,
'Success rate': crit_rate,
'duration': crit_time}
# error management
# ****************
try:
errors = result['details']['errors']
result['errors'] = errors.replace('{0}', '')
except:
print "Error field not present (Brahamputra runs?)"
mypath = os.path.abspath(__file__)
tplLoader = jinja2.FileSystemLoader(os.path.dirname(mypath))
templateEnv = jinja2.Environment(loader=tplLoader)
TEMPLATE_FILE = "./template/index-tempest-tmpl.html"
template = templateEnv.get_template(TEMPLATE_FILE)
outputText = template.render(scenario_results=scenario_results,
items=items,
installer=installer)
with open("./release/master/index-tempest-" +
installer + ".html", "wb") as fh:
fh.write(outputText)
print "Tempest automatic reporting Done"
|