# -*- 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() #Creat summary report in html html = get_summary_report_html(summary_data) 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 #TODO The name of the zip file is formatted as follows: # agl-test-log-13.0.1-raspberrypi4-20200808.zip base_name = REPORT_LOGS_DIR + "agl-test-log-xxx" root_dir = TMP_LOGS_DIR + "test-report" shutil.make_archive(base_name,"zip",root_dir) # TODO: # Upload the final log to Artifactorial #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): status = "fail" if(summary_data["summary"]["summary_total"]==summary_data["summary"]["summary_passed"]): status = "success" html = "" #
html = html + "" 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 :
" #test suite | " html = html + "status | " html = html + "pass | " html = html + "fail | " html = html + "skip | " html = html + "
---|---|---|---|---|
" + test_suite + " | " html = html + "" + summary_data[test_suite]["test_status"] + " | " html = html + "" + str(summary_data[test_suite]["passed"]) + " | " html = html + "" + str(summary_data[test_suite]["failed"]) + " | " html = html + "" + str(summary_data[test_suite]["skipped"]) + " | " html = html + "