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 5BBB6B59C for ; Mon, 16 Feb 2015 05:45:28 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 15 Feb 2015 20:45:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,585,1418112000"; d="scan'208";a="678460531" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga002.fm.intel.com with ESMTP; 15 Feb 2015 20:45:26 -0800 Received: from shecgisg003.sh.intel.com (shecgisg003.sh.intel.com [10.239.29.90]) by shvmail01.sh.intel.com with ESMTP id t1G4jOt3017637; Mon, 16 Feb 2015 12:45:24 +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 t1G4jMXS009149; Mon, 16 Feb 2015 12:45:24 +0800 Received: (from yliu84x@localhost) by shecgisg003.sh.intel.com (8.13.6/8.13.6/Submit) id t1G4jMNh009145; Mon, 16 Feb 2015 12:45:22 +0800 From: Yong Liu To: dts@dpdk.org Date: Mon, 16 Feb 2015 12:45:18 +0800 Message-Id: <1424061918-9106-2-git-send-email-yong.liu@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1424061918-9106-1-git-send-email-yong.liu@intel.com> References: <1424061918-9106-1-git-send-email-yong.liu@intel.com> Subject: [dts] [PATCH 2/2] framework: support load execution result from excel 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:29 -0000 DTS used to save Result object to excel file. This patch support prase excel back into Result object. Implement some functions in test_result module that can get cases result by target and suites. Signed-off-by: Marvinliu diff --git a/framework/excel_reporter.py b/framework/excel_reporter.py index 809dead..2b86754 100644 --- a/framework/excel_reporter.py +++ b/framework/excel_reporter.py @@ -52,6 +52,8 @@ Result: """ import xlwt +import xlrd +from test_result import Result from xlwt.ExcelFormula import Formula @@ -68,43 +70,50 @@ class ExcelReporter(object): self.xsl_file = None self.result = None self.__styles() - - def __init(self): + self.titles = [ {'row': 0, 'col': 0, 'width': 4000, 'title': 'DUT', 'style': self.header_style}, + {'row': 0, 'col': 1, 'width': 7500, 'title': 'Target', 'style': self.header_style}, + {'row': 0, 'col': 2, 'width': 3000, 'title': 'NIC', 'style': self.header_style}, + {'row': 0, 'col': 3, 'width': 5000, 'title': 'Test suite', 'style': self.header_style}, + {'row': 0, 'col': 4, 'width': 8000, 'title': 'Test case', 'style': self.header_style}, + {'row': 0, 'col': 5, 'width': 3000, 'title': 'Results', 'style': self.header_style}, + {'row': 0, 'col': 7, 'width': 1000, 'title': 'Pass', 'style': self.header_style}, + {'row': 0, 'col': 8, 'width': 3000, 'title': 'Fail', 'style': self.header_style}, + {'row': 0, 'col': 9, 'width': 3000, 'title': 'Blocked', 'style': self.header_style}, + {'row': 0, 'col': 10, 'width': 3000, 'title': 'Not Run', 'style': self.header_style}, + {'row': 0, 'col': 11, 'width': 3000, 'title': 'Total', 'style': self.header_style}, + ] + + def __get_col_by_title(self, title): + cols = [] + for ti in self.titles: + if ti['title'] == title: + cols.append(ti['col']) + return cols + + def __write_init(self): self.workbook = xlwt.Workbook() self.sheet = self.workbook.add_sheet( "Test Results", cell_overwrite_ok=True) + def __read_init(self): + self.row = 0 + self.col = 0 + try: + self.workboot = xlrd.open_workbook(self.filename) + self.rsheet = self.workboot.sheet_by_name("Test Results") + except Exception as e: + print "FAILED TO LOAD EXCEL FILE %s: %s" % (self.filename, e) + def __add_header(self): - self.sheet.write(0, 0, 'DUT', self.header_style) - self.sheet.write(0, 1, 'Target', self.header_style) - self.sheet.write(0, 2, 'NIC', self.header_style) - self.sheet.write(0, 3, 'Test suite', self.header_style) - self.sheet.write(0, 4, 'Test case', self.header_style) - self.sheet.write(0, 5, 'Results', self.header_style) - - self.sheet.write(0, 7, 'Pass', self.header_style) - self.sheet.write(0, 8, 'Fail', self.header_style) - self.sheet.write(0, 9, 'Blocked', self.header_style) - self.sheet.write(0, 10, 'Not Run', self.header_style) - self.sheet.write(0, 11, 'Total', self.header_style) - - self.sheet.write(1, 7, Formula('COUNTIF(F2:F2000,"PASSED")')) - self.sheet.write(1, 8, Formula('COUNTIF(F2:F2000,"FAILED*") + COUNTIF(F2:F2000,"IXA*")')) - self.sheet.write(1, 9, Formula('COUNTIF(F2:F2000,"BLOCKED*")')) - self.sheet.write(1, 11, Formula('H2+I2+J2+K2')) - - self.sheet.col(0).width = 4000 - self.sheet.col(1).width = 7500 - self.sheet.col(2).width = 3000 - self.sheet.col(3).width = 5000 - self.sheet.col(4).width = 8000 - self.sheet.col(5).width = 3000 - self.sheet.col(6).width = 1000 - self.sheet.col(7).width = 3000 - self.sheet.col(8).width = 3000 - self.sheet.col(9).width = 3000 - self.sheet.col(10).width = 3000 - self.sheet.col(11).width = 3000 + for title in self.titles: + self.sheet.write(title['row'], title['col'], title['title'], title['style']) + + self.sheet.write(1, self.__get_col_by_title('Pass')[0], Formula('COUNTIF(F2:F2000,"PASSED")')) + self.sheet.write(1, self.__get_col_by_title('Fail')[0], Formula('COUNTIF(F2:F2000,"FAILED*") + COUNTIF(F2:F2000,"IXA*")')) + self.sheet.write(1, self.__get_col_by_title('Blocked')[0], Formula('H2+I2+J2+K2')) + + for title in self.titles: + self.sheet.col(title['col']).width = title['width'] def __styles(self): header_pattern = xlwt.Pattern() @@ -208,8 +217,44 @@ class ExcelReporter(object): self.__write_targets(dut) self.row += 1 + def __save_result(self): + dut_col = self.__get_col_by_title('DUT')[0] + target_col = self.__get_col_by_title('Target')[0] + nic_col = self.__get_col_by_title('NIC')[0] + suite_col = self.__get_col_by_title('Test suite')[0] + case_col = self.__get_col_by_title('Test case')[0] + result_col = self.__get_col_by_title('Results')[0] + + # skip first title row + for row in range(1, self.rsheet.nrows): + dutIP = self.rsheet.cell(row, dut_col).value + target = self.rsheet.cell(row, target_col).value + nic = self.rsheet.cell(row, nic_col).value + suite = self.rsheet.cell(row, suite_col).value + case = self.rsheet.cell(row, case_col).value + result = self.rsheet.cell(row, result_col).value + if dutIP is not '': + self.result.dut = dutIP + if target is not '': + self.result.target = target + if nic is not '': + self.result.nic = nic + if suite is not '': + self.result.test_suite = suite + if case is not '': + self.result.test_case = case + + results = result.replace('\'', '').split(' ', 1) + + if 'PASSED' in result: + self.result.test_case_passed() + elif 'BLOCKED' in result: + self.result.test_case_blocked(results[1]) + elif result != '': + self.result.test_case_failed(results[1]) + def save(self, result): - self.__init() + self.__write_init() self.__add_header() self.row = 1 self.col = 0 @@ -218,3 +263,9 @@ class ExcelReporter(object): self.__parse_result() self.workbook.save(self.filename) + + def load(self): + self.__read_init() + self.result = Result() + self.__save_result() + return self.result diff --git a/framework/test_result.py b/framework/test_result.py index 79faee1..a77c451 100644 --- a/framework/test_result.py +++ b/framework/test_result.py @@ -207,6 +207,49 @@ class Result(object): return None return self.__internals[dut_idx + 1][target_idx + 2][::2] + def get_target_suites(self, dut, target): + """ + Return suite status for a given DUT, target. + """ + try: + target_status = [] + dut_idx = self.__internals.index(dut) + target_idx = self.__internals[dut_idx + 1].index(target) + suites = self.__internals[dut_idx + 1][target_idx + 2] + except: + return None + return suites + + def get_cases_by_status(self, suites, status): + cases = [] + try: + suite_results = suites[1::2] + for suite in suite_results: + case_names = suite[0::2] + case_results = suite[1::2] + index = 0 + for case in case_results: + if case[0] == status: + cases.append(case_names[index]) + index += 1 + + except: + return None + return cases + + def get_suites_status(self, suites): + status = [] + try: + suite_results = suites[1::2] + for suite in suite_results: + case_results = suite[1::2] + for case in case_results: + status.append(case[0]) + except: + return None + + return status + def all_test_cases(self, dut, target, suite): """ Returns all the test cases for a given DUT, target and test case. -- 1.9.3