# -*- coding:utf-8 -*- import pytest import json import shutil import subprocess from jinja2 import Environment,FileSystemLoader import plugins.agl_test_conf as conf @pytest.fixture(scope='session' ,autouse=True) def setup_compress_function(): #Before the test start, clean the env report_json = conf.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',conf.TMP_TEST_REPORT]) subprocess.run(['mkdir','-p',conf.REPORT_LOGS_DIR]) yield #Collect report.json from all test sets to generate a report.json for all the test sets report_files = conf.TMP_LOGS_DIR + "report_files" with open(report_files,'w') as report_f: subprocess.run(['find','-name','report.json'],cwd=conf.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 = conf.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 summary_html_data = format_test_suite_table(summary_data) summary_html_data["log_zip_name"] = zip_name env = Environment(loader=FileSystemLoader(conf.get_tpl_dir())) template = env.get_template("all_test_suites_tpl.html") html_path = conf.TMP_LOGS_DIR + "test-report/summary-report.html" with open(html_path, "w") as html_file: html_content = template.render(data=summary_html_data) html_file.write(html_content) html_file.close() #Copy summary report file source_file = conf.TMP_LOGS_DIR + "test-report/summary-report.html" target_file = conf.REPORT_LOGS_DIR + "summary-report.html" shutil.copyfile(source_file,target_file) #Package the test report base_name = conf.REPORT_LOGS_DIR + zip_name root_dir = conf.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 = conf.TMP_LOGS_DIR + report with open(report_json,'r') as f: data = json.load(f) total = passed = xpassed = failed = xfailed = skipped = 0 total = data["collected"] passed = data["passed"] xpassed = data["xpassed"] failed = data["failed"] xfailed = data["xfailed"] skipped = data["skipped"] test_status = data["test_status"] test_name = data["test_name"] this_summary = { 'total': total, 'passed': passed, 'xpassed': xpassed, 'failed': failed, 'xfailed': xfailed, '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, } status = "" if (summary_data["summary"]["summary_total"] == summary_data["summary"]["summary_skipped"]): status = "skip" elif (summary_data["summary"]["summary_failed"] == 0): status = "pass" else: status = "fail" summary_data["summary"]["status"] = status return summary_data def format_test_suite_table(summary_data): html_data = "" #init table title bgcolor = conf.BGCOLOR_TABLE_TITLE color = conf.COLOR_TABLE_TITLE html_data += "\t\n" html_data += "\t\t test suite \n" html_data += "\t\t status \n" html_data += "\t\t total \n" html_data += "\t\t pass \n" html_data += "\t\t xpass \n" html_data += "\t\t fail \n" html_data += "\t\t xfail \n" html_data += "\t\t skip \n" html_data += "\t\n" #init all rows bgcolor = conf.BGCOLOR_DARK for key in summary_data: if(key != "summary"): html_data += "\t\n" html_data += "\t\t" + key + "\n" html_data += "\t\t" + summary_data[key]["test_status"] + "\n" html_data += "\t\t" + str(summary_data[key]["total"]) + "\n" html_data += "\t\t" + str(summary_data[key]["passed"]) + "\n" html_data += "\t\t" + str(summary_data[key]["xpassed"]) + "\n" html_data += "\t\t" + str(summary_data[key]["failed"]) + "\n" html_data += "\t\t" + str(summary_data[key]["xfailed"]) + "\n" html_data += "\t\t" + str(summary_data[key]["skipped"]) + "\n" html_data += "\t\n" if (bgcolor == conf.BGCOLOR_DARK): bgcolor = conf.BGCOLOR_LIGHT else: bgcolor = conf.BGCOLOR_DARK summary_data["test_suite_table_html"] = html_data return summary_data