# -*- coding:utf-8 -*- import pytest import json import shutil import subprocess from plugins.agl_test_conf import BASE_LOGS_DIR from plugins.agl_test_conf import TMP_LOGS_DIR from plugins.agl_test_conf import REPORT_LOGS_DIR from plugins.agl_test_conf import TMP_TEST_REPORT @pytest.fixture(scope='session' ,autouse=True) def setup_compress_function(): #Before the test start, clean the env report_json = TMP_LOGS_DIR + "report.json" output = subprocess.run(['ls',report_json],stdout=subprocess.PIPE,stderr=subprocess.PIPE) if(output.returncode == 0): subprocess.run(['rm',report_json]) #Makdir of TMP_TEST_REPORT and REPORT_LOGS_DIR subprocess.run(['mkdir','-p',TMP_TEST_REPORT]) subprocess.run(['mkdir','-p',REPORT_LOGS_DIR]) yield #Collect report.json from all test sets to generate a report.json for all the test sets report_files = TMP_LOGS_DIR + "report_files" with open(report_files,'w') as report_f: subprocess.run(['find','-name','report.json'],cwd=TMP_LOGS_DIR,stdout=report_f) report_f.close() #Get the summary data and write to report.json file summary_data = get_summary_data(report_files) summary_json = TMP_LOGS_DIR + "/report.json" with open(summary_json, 'w') as summary_file: json.dump(summary_data,summary_file,indent=4,sort_keys=False) summary_file.close() #Get zip file name issue = subprocess.getoutput('cat /etc/issue') version = issue[23:-7] machine_name = subprocess.getoutput('uname -n') date = subprocess.getoutput('date +%Y%m%d') zip_name = "agl-test-log-" + version + '-' + machine_name + '-' + date #Creat summary report in html html = get_summary_report_html(summary_data,zip_name) html_path = TMP_LOGS_DIR + "test-report/summary-report.html" html_file = open(html_path,"w") html_file.write(html) html_file.close() #Copy summary report file source_file = TMP_LOGS_DIR + "test-report/summary-report.html" target_file = REPORT_LOGS_DIR + "summary-report.html" shutil.copyfile(source_file,target_file) #Package the test report base_name = REPORT_LOGS_DIR + zip_name root_dir = TMP_LOGS_DIR + "test-report" shutil.make_archive(base_name,"zip",root_dir) #Summarize all reports.json file def get_summary_data(report_files): summary_data = {} summary_total = summary_passed = summary_failed = summary_skipped = 0 files = open(report_files) while True: report = files.readline() if not report: break report = report[1:-1] report_json = TMP_LOGS_DIR + report with open(report_json,'r') as f: data = json.load(f) total = passed = failed = skipped = 0 total = data["collected"] passed = data["passed"] failed = data["failed"] skipped = data["skipped"] test_status = data["test_status"] test_name = data["test_name"] this_summary = { 'total': total, 'passed': passed, 'failed': failed, 'skipped': skipped, 'test_status': test_status, } summary_data[test_name] = this_summary summary_total = summary_total + 1 if(test_status=="passed"): summary_passed = summary_passed + 1 elif(test_status=="failed"): summary_failed = summary_failed + 1 else: summary_skipped = summary_skipped + 1 f.close() summary_data["summary"] = { "summary_total": summary_total, "summary_passed": summary_passed, "summary_failed": summary_failed, "summary_skipped": summary_skipped, } return summary_data #Generate content for summary report json file def get_summary_report_html(summary_data,zip_name): status = "fail" if(summary_data["summary"]["summary_total"]==summary_data["summary"]["summary_passed"]): status = "success" html = "" # html = html + "" html = html + "" html = html + "Summary Report" html = html + "" html = html + "" # html = html + "" html = html + "

" + "Summary Report" + "

" html = html + "

" + "Status :" + status + "

" html = html + "

" + "Total: " + str(summary_data["summary"]["summary_total"]) html = html + " Pass: " + str(summary_data["summary"]["summary_passed"]) html = html + " Fail: " + str(summary_data["summary"]["summary_failed"]) html = html + " Skip: " + str(summary_data["summary"]["summary_skipped"]) + "

" html = html + "

Details :

" #
html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" #Add content to the table bgcolor = 0 for test_suite in summary_data: if test_suite == "summary": continue if bgcolor == 0: html = html + "" bgcolor = 1 else: html = html + "" bgcolor = 0 html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" html = html + "" html = html + "
test suitestatuspassfailskip
" + test_suite + "" + summary_data[test_suite]["test_status"] + "" + str(summary_data[test_suite]["passed"]) + "" + str(summary_data[test_suite]["failed"]) + "" + str(summary_data[test_suite]["skipped"]) + "
" html = html + "

" html = html + "Detail log :" #TODO update the link address for agl-test-log-xxx.zip html = html + "" + zip_name + ".zip" html = html + "" html = html + "" return html