diff options
Diffstat (limited to 'conftest.py')
-rw-r--r-- | conftest.py | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..eade841 --- /dev/null +++ b/conftest.py @@ -0,0 +1,170 @@ +# -*- 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>" + + #<head> </head> + html = html + "<head>" + html = html + "<title>" + html = html + "Summary Report" + html = html + "</title>" + html = html + "</head>" + + #<body> </body> + html = html + "<body>" + html = html + "<h1>" + "Summary Report" + "</h1>" + html = html + "<p>" + "Status :" + status + "</p>" + html = html + "<p>" + "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"]) + "</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 suite</font></th>" + html = html + "<th><font color = \"white\">status</font></th>" + html = html + "<th><font color = \"white\">pass</font></th>" + html = html + "<th><font color = \"white\">fail</font></th>" + html = html + "<th><font color = \"white\">skip</font></th>" + html = html + "</tr>" + + #Add content to the table + bgcolor = 0 + for test_suite in summary_data: + if test_suite == "summary": + continue + if bgcolor == 0: + html = html + "<tr bgcolor = \"CCCBE4\">" + bgcolor = 1 + else: + html = html + "<tr bgcolor = \"E8E7F2\">" + bgcolor = 0 + html = html + "<th>" + test_suite + "</th>" + html = html + "<th>" + summary_data[test_suite]["test_status"] + "</th>" + html = html + "<th>" + str(summary_data[test_suite]["passed"]) + "</th>" + html = html + "<th>" + str(summary_data[test_suite]["failed"]) + "</th>" + html = html + "<th>" + str(summary_data[test_suite]["skipped"]) + "</th>" + html = html + "</tr>" + + html = html + "</table>" + html = html + "<p></p>" + html = html + "<font>Detail log :</font>" + #TODO update the link address for agl-test-log-xxx.zip + html = html + "<a href=\"" + "address of agl-test-log-xxx.zip " + html = html + "\">agl-test-log-13.0.1-raspberrypi4-20200808.zip</a>" + html = html + "</body>" + html = html + "</html>" + + return html |