import json import shutil import plugins.agl_test_conf as conf #Compress the tmp log to .zip def log_compress(THIS_TEST): base_name = conf.get_log_dir(THIS_TEST) root_dir = conf.get_tmp_log_dir(THIS_TEST) 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 #Input format # { # "test_id": ['test_id', 'values', 'status'], # "test_id": ['test_id', 'values', 'status'] # } #Output format # { # 'test_id': 'status', # 'test_id': 'status' # } def format_caselist(case_info_list: dict): case_status = dict() for key in case_info_list: case_info = case_info_list[key] case_status[key] = case_info[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 #Input format # { # "test_id": ['test_id', 'values', 'status'], # "test_id": ['test_id', 'values', 'status'] # } #Output format # { # 'collected': collected_num, # 'passed': passed_num, # 'failed': failed_num, # 'skipped": skipped_num # } def format_summary(case_info_list): collected_num = passed_num = failed_num = skipped_num = 0 for key in case_info_list: case_info = case_info_list[key] collected_num = collected_num + 1 if (case_info[2] == "passed"): passed_num = passed_num + 1 elif (case_info[2] == "failed"): failed_num = failed_num + 1 else: skipped_num = skipped_num + 1 summary = dict() summary["collected"] = collected_num summary["passed"] = passed_num summary["failed"] = failed_num summary["skipped"] = skipped_num return summary def format_json_data(name, test_set_status, summary, case_status): data = summary data["test_name"] = name data["test_status"] = test_set_status data["case_status"] = case_status return summary #Write the test result to a json file def write_data_to_json(THIS_TEST,test_set_status,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 write_data_to_file(data, "json") def get_report_html(THIS_TEST,test_set_status,summary,case_status): html = "" # html = html + "" html = html + "" html = html + THIS_TEST + "test report" html = html + "" html = html + "" # html = html + "" html = html + "

" + THIS_TEST + " test report" + "

" html = html + "

" + "Status :" + test_set_status + "

" html = html + "

" + "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]) + "

" html = html + "

Details :

" #
html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" #Add content to the table bgcolor = 0 for test_case in case_status: if bgcolor == 0: html = html + "" bgcolor = 1 else: html = html + "" bgcolor = 0 html = html + "" html = html + "" html = html + "" html = html + "
test casestatus
" + test_case + "" + case_status[test_case] + "
" html = html + "

" html = html + "Detail log :" #TODO update the link address for log.zip html = html + "log.zip" html = html + "" html = html + "" return html def write_to_html_file(THIS_TEST,html): html_path = conf.get_html_filename(THIS_TEST) html_file = open(html_path,"w") html_file.write(html) html_file.close() def create_gen_web_page(filename, tlpname, html_data): # here, jinja2 module should be installed first from jinja2 import Environment,FileSystemLoader env = Environment(loader=FileSystemLoader(conf.get_tpl_dir())) template = env.get_template(tlpname) with open(filename,'w+') as f: html_content = template.render(data=html_data) f.write(html_content) f.close() def write_data_to_file(data, file_type = "json"): testname = data["test_name"] if (file_type == "json"): filename = conf.get_json_filename(testname) with open(filename,'w') as f: json.dump(data,f,indent=4,sort_keys=False) f.close() elif (file_type == "html"): filename = conf.get_html_filename(testname) tlpname = conf.get_default_html_tpl() create_gen_web_page(filename, tlpname, data) else: #TODO waiting for adding print("ERROR: file type %s is error. Expect json or html." % file_type) def change_json_to_html(test_set_name): json_file = conf.get_json_filename(test_set_name) html_file = conf.get_html_filename(test_set_name) #read data from json file html_data = dict() with open(json_file,'r') as f: html_data = json.load(f) f.close() #format json data to html data html_data["case_status_html"] = format_case_status_table(html_data["case_status"]) #save data to html file write_data_to_file(html_data, "html") def format_case_status_table(case_status): html_data = "" #init table title bgcolor = conf.BGCOLOR_TABLE_TITLE color = conf.COLOR_TABLE_TITLE html_data += "\t\n" html_data += "\t\t test case \n" html_data += "\t\t status \n" html_data += "\t\n" #init all rows bgcolor = conf.BGCOLOR_DARK for key in case_status: if ( bgcolor == conf.BGCOLOR_DARK ): html_data += "\t\n" bgcolor = conf.BGCOLOR_LIGHT else: html_data += "\t\n" bgcolor = conf.BGCOLOR_DARK html_data += "\t\t" + key + "\n" html_data += "\t\t" + case_status[key] + "\n" html_data += "\t\n" return html_data