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
149
150
151
|
import json
import os
import re
import urllib2
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
COL_1_LEN = 25
COL_2_LEN = 15
COL_3_LEN = 12
COL_4_LEN = 15
COL_5_LEN = 75
# If we run from CI (Jenkins) we will push the results to the DB
# and then we can print the url to the specific test result
IS_CI_RUN = False
BUILD_TAG = None
logger = ft_logger.Logger("generate_report").getLogger()
def init(tiers_to_run):
test_cases_arr = []
for tier in tiers_to_run:
for test in tier.get_tests():
test_cases_arr.append({'test_name': test.get_name(),
'tier_name': tier.get_name(),
'result': 'Not executed',
'duration': '0',
'url': ''})
return test_cases_arr
def get_results_from_db():
url = ft_utils.get_db_url() + '/results?build_tag=' + BUILD_TAG
logger.debug("Query to rest api: %s" % url)
try:
data = json.load(urllib2.urlopen(url))
return data['results']
except:
logger.error("Cannot read content from the url: %s" % url)
return None
def get_data(test, results):
test_result = test['result']
url = ''
for test_db in results:
if test['test_name'] in test_db['case_name']:
id = test_db['_id']
url = ft_utils.get_db_url() + '/results/' + id
test_result = test_db['criteria']
return {"url": url, "result": test_result}
def print_line(w1, w2='', w3='', w4='', w5=''):
str = ('| ' + w1.ljust(COL_1_LEN - 1) +
'| ' + w2.ljust(COL_2_LEN - 1) +
'| ' + w3.ljust(COL_3_LEN - 1) +
'| ' + w4.ljust(COL_4_LEN - 1))
if IS_CI_RUN:
str += ('| ' + w5.ljust(COL_5_LEN - 1))
str += '|\n'
return str
def print_line_no_columns(str):
TOTAL_LEN = COL_1_LEN + COL_2_LEN + COL_3_LEN + COL_4_LEN + 2
if IS_CI_RUN:
TOTAL_LEN += COL_5_LEN + 1
return ('| ' + str.ljust(TOTAL_LEN) + "|\n")
def print_separator(char="=", delimiter="+"):
str = ("+" + char * COL_1_LEN +
delimiter + char * COL_2_LEN +
delimiter + char * COL_3_LEN +
delimiter + char * COL_4_LEN)
if IS_CI_RUN:
str += (delimiter + char * COL_5_LEN)
str += '+\n'
return str
def main(args):
global BUILD_TAG, IS_CI_RUN
executed_test_cases = args
BUILD_TAG = os.getenv("BUILD_TAG")
if BUILD_TAG is not None:
IS_CI_RUN = True
if IS_CI_RUN:
results = get_results_from_db()
if results is not None:
for test in executed_test_cases:
data = get_data(test, results)
test.update({"url": data['url'],
"result": data['result']})
TOTAL_LEN = COL_1_LEN + COL_2_LEN + COL_3_LEN + COL_4_LEN
if IS_CI_RUN:
TOTAL_LEN += COL_5_LEN
MID = TOTAL_LEN / 2
INSTALLER = os.getenv('INSTALLER_TYPE', 'unknown')
CI_LOOP = os.getenv('CI_LOOP')
SCENARIO = os.getenv('DEPLOY_SCENARIO')
CI_LOOP = None
if BUILD_TAG is not None:
if re.search("daily", BUILD_TAG) is not None:
CI_LOOP = "daily"
else:
CI_LOOP = "weekly"
str = ''
str += print_separator('=', delimiter="=")
str += print_line_no_columns(' ' * (MID - 8) + 'FUNCTEST REPORT')
str += print_separator('=', delimiter="=")
str += print_line_no_columns(' ')
str += print_line_no_columns(" Deployment description:")
str += print_line_no_columns(" INSTALLER: %s" % INSTALLER)
if SCENARIO is not None:
str += print_line_no_columns(" SCENARIO: %s" % SCENARIO)
if BUILD_TAG is not None:
str += print_line_no_columns(" BUILD TAG: %s" % BUILD_TAG)
if CI_LOOP is not None:
str += print_line_no_columns(" CI LOOP: %s" % CI_LOOP)
str += print_line_no_columns(' ')
str += print_separator('=')
if IS_CI_RUN:
str += print_line('TEST CASE', 'TIER', 'DURATION', 'RESULT', 'URL')
else:
str += print_line('TEST CASE', 'TIER', 'DURATION', 'RESULT')
str += print_separator('=')
for test in executed_test_cases:
str += print_line(test['test_name'],
test['tier_name'],
test['duration'],
test['result'],
test['url'])
str += print_separator('-')
logger.info("\n\n\n%s" % str)
if __name__ == '__main__':
import sys
main(sys.argv[1:])
|