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
|
import json
import shutil
from plugins.agl_test_conf import REPORT_LOGS_DIR
from plugins.agl_test_conf import TMP_LOGS_DIR
#Compress the tmp log to .zip, and store the zip file under TMP_LOGS_DIR/test-report
def log_compress(THIS_TEST):
base_name = TMP_LOGS_DIR + "test-report/" + THIS_TEST + "/log"
root_dir = TMP_LOGS_DIR + THIS_TEST + "/log"
shutil.make_archive(base_name,'zip',root_dir)
#Get all test cases status
#The type of test_cases_values_and_status is list,it's looks like that:
#[['test_id', 'values', 'status'], ['rpm01', 'TEST-PASS', 'passed'],....]
#The type of case_status is directory,it's looks like:
#{'rpm03': 'passed', 'rpm02': 'passed', 'rpm01': 'passed'}
def get_case_status(test_cases_values_and_status):
num = len(test_cases_values_and_status)
case_status = {}
for i in range(num):
if (i==0):
continue
case_status[test_cases_values_and_status[i][0]] = test_cases_values_and_status[i][2]
return case_status
#Case_status is a dictionary type of data,Record the test name/id and final results of all test cases
#Get the summary of the test case status, the result is like that:
#Summary = [["collected",3],["passed",3],["failed",0],["skipped",0]]
def get_summary(case_status):
collected_num = passed_num = failed_num = skipped_num = 0
collected_num = len(case_status)
for status in case_status.values():
if (status == "passed"):
passed_num = passed_num + 1
elif (status == "failed"):
failed_num = failed_num + 1
else:
skipped_num = skipped_num + 1
summary = [["collected",collected_num],["passed",passed_num],["failed",failed_num],["skipped",skipped_num]]
return summary
#Write the test result to a json file under the dir TMP_LOGS_DIR
def write_date_to_json(test_set_status,THIS_TEST,summary,case_status):
#The data that will be written into the json file
data = {
'test_status': test_set_status,
'test_name': THIS_TEST,
'collected': summary[0][1],
'passed': summary[1][1],
'failed': summary[2][1],
'skipped': summary[3][1],
'case_status': case_status
}
#Write the "data" to the json file
report_json = TMP_LOGS_DIR + THIS_TEST + "/" + "report.json"
with open(report_json,'w') as f:
json.dump(data,f,indent=4,sort_keys=False)
f.close()
def get_report_html(THIS_TEST,test_set_status,summary,case_status):
html = "<html>"
#<head> </head>
html = html + "<head>"
html = html + "<title>"
html = html + THIS_TEST + "test report"
html = html + "</title>"
html = html + "</head>"
#<body> </body>
html = html + "<body>"
html = html + "<h1>" + THIS_TEST + " test report" + "</h1>"
html = html + "<p>" + "Status :" + test_set_status + "</p>"
html = html + "<p>" + "Total: " + str(summary[0][1])
html = html + " Pass: " + str(summary[1][1])
html = html + " Fail: " + str(summary[2][1])
html = html + " Skip: " + str(summary[3][1]) + "</p>"
html = html + "<p>Details : </p>"
#<table> </table>
html = html + "<table border=\"1\" cellspacing=\"2\" >"
html = html + "<tr bgcolor = \"2400B0\">"
html = html + "<th><font color = \"white\">test case</font></th>"
html = html + "<th><font color = \"white\">status</font></th>"
html = html + "</tr>"
#Add content to the table
bgcolor = 0
for test_case in case_status:
if bgcolor == 0:
html = html + "<tr bgcolor = \"CCCBE4\">"
bgcolor = 1
else:
html = html + "<tr bgcolor = \"E8E7F2\">"
bgcolor = 0
html = html + "<th>" + test_case + "</th>"
html = html + "<th>" + case_status[test_case] + "</th>"
html = html + "</tr>"
html = html + "</table>"
html = html + "<p></p>"
html = html + "<font>Detail log :</font>"
#TODO update the link address for log.zip
html = html + "<a href=\"" + THIS_TEST + "/log.zip" + "\">log.zip</a>"
html = html + "</body>"
html = html + "</html>"
return html
def write_to_html_file(THIS_TEST,html):
html_path = TMP_LOGS_DIR + "test-report/" + THIS_TEST + "/report.html"
html_file = open(html_path,"w")
html_file.write(html)
html_file.close()
|