From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 3BE8AB59C for ; Mon, 16 Feb 2015 05:45:27 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP; 15 Feb 2015 20:45:25 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,585,1418112000"; d="scan'208";a="455100644" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by FMSMGA003.fm.intel.com with ESMTP; 15 Feb 2015 20:30:28 -0800 Received: from shecgisg003.sh.intel.com (shecgisg003.sh.intel.com [10.239.29.90]) by shvmail01.sh.intel.com with ESMTP id t1G4jMqD016658; Mon, 16 Feb 2015 12:45:22 +0800 Received: from shecgisg003.sh.intel.com (localhost [127.0.0.1]) by shecgisg003.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t1G4jK52009142; Mon, 16 Feb 2015 12:45:22 +0800 Received: (from yliu84x@localhost) by shecgisg003.sh.intel.com (8.13.6/8.13.6/Submit) id t1G4jJne009138; Mon, 16 Feb 2015 12:45:19 +0800 From: Yong Liu To: dts@dpdk.org Date: Mon, 16 Feb 2015 12:45:17 +0800 Message-Id: <1424061918-9106-1-git-send-email-yong.liu@intel.com> X-Mailer: git-send-email 1.7.4.1 Subject: [dts] [PATCH 1/2] framework: add new module to create email report X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Feb 2015 04:45:27 -0000 This module will parse excel result file and create email like below. Summary: Run XXX cases (PASS-Count FAIL-Count BLOCK-Count) Latest commit log: Kernel Version: CPU info: GCC Version: Target: x86_64-native-linuxapp-gcc FAIL:XXX/YYY Detail information of failed cases: Target: x86_64-native-linuxapp-gcc Test Case Result Case name FAILED Signed-off-by: Marvinliu diff --git a/framework/email_report.py b/framework/email_report.py new file mode 100644 index 0000000..38e390c --- /dev/null +++ b/framework/email_report.py @@ -0,0 +1,132 @@ +import argparse # prase arguments module +import smtplib # send email module +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart + +from excel_reporter import ExcelReporter # excel parse module +from texttable import Texttable # formatted output module + +rece_maillist = ["dts@dpdk.org"] +from_maillist = "sys_stv@intel.com" + +# Global variable +total_target = 0 +global os_type +global test_type +global git_commit +global dut_config +dut_config = [] +os_type = "" +test_type = "" +git_commit = "" + + +# Format of Email +class Email(): + + def __init__(self, excel): + self.subject_format = "%s %s Test Report" + self.summary_format = "Summary: Run %d cases (PASS-%d FAIL-%d BLOCK-%d)" + self.result_summary_format = "Target: %-30s FAIL:%d/%d\r\n" + excel = ExcelReporter(excel) + self.result = excel.load() + self.smtp = smtplib.SMTP() + self.smtp.connect("mail.intel.com", 25) + + def subject(self): + return self.subject_format % (os_type, test_type) + + def summary(self): + total = 0 + passed = 0 + fail = 0 + block = 0 + for dut in self.result.all_duts(): + targets = self.result.all_targets(dut) + for target in targets: + suites = self.result.get_target_suites(dut, target) + results = self.result.get_suites_status(suites) + total += len(results) + passed += results.count("PASSED") + fail += results.count("FAILED") + block += results.count("BLOCKED") + + return self.summary_format % (total, passed, fail, block) + + def target_summary(self): + summary = "" + for dut in self.result.all_duts(): + targets = self.result.all_targets(dut) + for target in targets: + suites = self.result.get_target_suites(dut, target) + results = self.result.get_suites_status(suites) + summary += self.result_summary_format % (target, results.count("FAILED"), len(results)) + return summary + + def failed_case_summary(self): + summary = "" + for dut in self.result.all_duts(): + targets = self.result.all_targets(dut) + for target in targets: + summary += "Target: %s\r\n" % (target) + table = Texttable() + table.set_deco(Texttable.HEADER) + table.set_cols_align(["l", "l"]) + table.set_cols_width([50, 10]) + table.add_row(["Test Case", "Result"]) + suites = self.result.get_target_suites(dut, target) + failed = self.result.get_cases_by_status(suites, 'FAILED') + blocked = self.result.get_cases_by_status(suites, 'BLOCKED') + for case in failed: + table.add_row([case, 'FAILED']) + for case in blocked: + table.add_row([case, 'BLOCKED']) + summary += table.draw() + summary += "\r\n\r\n" + + return summary + + def send(self, _from, _to, attachment): + content = "" + msg = MIMEMultipart('alternative') + msg['Subject'] = self.subject() + msg['From'] = _from + msg['To'] = ", ".join(_to) + content += self.summary() + content += "\r\n\r\n" + content += git_commit + content += "\r\n\r\n" + content += "".join(dut_config) + content += "\r\n\r\n" + content += self.target_summary() + content += "\r\n\r\n" + content += "Detail information of failed cases:\r\n" + content += self.failed_case_summary() + part2 = MIMEText(content, "plain", "utf-8") + msg.attach(part2) + fp = open(attachment, 'r') + part1 = MIMEText(fp.read(), 'base64', 'utf-8') + part1['Content-type'] = 'application/octet-stream' + part1['Content-Disposition'] = 'attachment;filename="output.zip"' + fp.close() + msg.attach(part1) + self.smtp.sendmail( + _from, _to, msg.as_string()) + self.smtp.quit() + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="DTS Email Report Module") + parser.add_argument("-o", "--os_type", default="Fedora20") + parser.add_argument("-t", "--test_type", default="Functional") + parser.add_argument( + "-e", "--excel_file", default="output/test_results.xls") + parser.add_argument("-g", "--git_commit", default="test commit") + args = parser.parse_args() + os_type = args.os_type + test_type = args.test_type + git_commit = args.git_commit + email = Email(args.excel_file) + print email.subject() + print email.summary() + print email.target_summary() + print email.failed_case_summary() -- 1.9.3