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 4FC8D5592 for ; Wed, 26 Jul 2017 11:23:11 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Jul 2017 02:23:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,414,1496127600"; d="scan'208";a="882956308" Received: from dpdk-test38.sh.intel.com ([10.67.111.97]) by FMSMGA003.fm.intel.com with ESMTP; 26 Jul 2017 02:23:10 -0700 From: Marvin Liu To: dts@dpdk.org Cc: Marvin Liu Date: Wed, 26 Jul 2017 05:20:59 -0400 Message-Id: <1501060860-63777-4-git-send-email-yong.liu@intel.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1501060860-63777-1-git-send-email-yong.liu@intel.com> References: <1501056972-59668-1-git-send-email-yong.liu@intel.com> <1501060860-63777-1-git-send-email-yong.liu@intel.com> Subject: [dts] [PATCH v2 3/4] framework: enhance test case execution process 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: Wed, 26 Jul 2017 09:23:11 -0000 1. Support suite and case level configuration in test_case module. 2. Debugger rerun command will call _execute_test_case which can do more things than just call case object. Signed-off-by: Marvin Liu diff --git a/framework/debugger.py b/framework/debugger.py index 8375590..c3ff33d 100644 --- a/framework/debugger.py +++ b/framework/debugger.py @@ -98,7 +98,8 @@ def rerun_command(): # re-run specified test case for case in suite_obj._get_test_cases(r'%s' % AliveCase): if callable(case): - case() + suite_obj.logger.info("Rerun Test Case %s Begin" % case.__name__) + suite_obj._execute_test_case(case) def exit_command(): diff --git a/framework/test_case.py b/framework/test_case.py index 31a5eaf..8671ffa 100644 --- a/framework/test_case.py +++ b/framework/test_case.py @@ -45,6 +45,7 @@ from settings import report_error from rst import RstReport from test_result import ResultTable, Result from logger import getLogger +from config import SuiteConf class TestCase(object): @@ -254,6 +255,12 @@ class TestCase(object): self._suite_result.test_case = case_obj.__name__ self._rst_obj.write_title("Test Case: " + case_name) + + # load suite configuration file here for rerun command + self._suite_conf = SuiteConf(self.suite_name) + self.case_cfg = self._suite_conf.load_case_config(case_name) + del(self._suite_conf) + case_result = True if self._check_inst is not None: if self._check_inst.case_skip(case_name[len("test_"):]): @@ -281,15 +288,8 @@ class TestCase(object): self.tester.get_session_output(timeout=0.1) # run set_up function for each case self.set_up() - # prepare debugger re-run case environment - if self._enable_debug or self._debug_case: - debugger.AliveSuite = self - debugger.AliveModule = __import__('TestSuite_' + self.suite_name) - debugger.AliveCase = case_name - if self._debug_case: - debugger.keyboard_handle(signal.SIGINT, None) - else: - case_obj() + # run test case + case_obj() self._suite_result.test_case_passed() @@ -328,22 +328,40 @@ class TestCase(object): """ Execute all test cases in one suite. """ + # prepare debugger rerun case environment + if self._enable_debug or self._debug_case: + debugger.AliveSuite = self + debugger.AliveModule = __import__('TestSuite_' + self.suite_name) if load_global_setting(FUNC_SETTING) == 'yes': for case_obj in self._get_functional_cases(): for i in range(self.tester.re_run_time + 1): - if self._execute_test_case(case_obj): - break - else: + ret = self.execute_test_case(case_obj): + + if ret is False: for dutobj in self.duts: dutobj.get_session_output(timeout = 0.5 * (i + 1)) self.tester.get_session_output(timeout = 0.5 * (i + 1)) time.sleep(i + 1) - self.logger.info(" Test case %s re-run %d time" % (case_obj.__name__, i + 1)) + self.logger.info(" Test case %s failed and re-run %d time" % (case_obj.__name__, i + 1)) + else: + break if load_global_setting(PERF_SETTING) == 'yes': for case_obj in self._get_performance_cases(): - self._execute_test_case(case_obj) + self.execute_test_case(case_obj) + + def execute_test_case(self, case_obj): + """ + Execute test case or enter into debug mode. + """ + debugger.AliveCase = case_obj.__name__ + + if self._debug_case: + self.logger.info("Rerun Test Case %s Begin" % debugger.AliveCase) + debugger.keyboard_handle(signal.SIGINT, None) + else: + return self._execute_test_case(case_obj) def get_result(self): return self._suite_result -- 1.9.3