[dts] [PATCH v1 3/4] framework: enhance test case execution process

Marvin Liu yong.liu at intel.com
Wed Jul 26 10:16:11 CEST 2017


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 <yong.liu at intel.com>

diff --git a/framework/debugger.py b/framework/debugger.py
index 8375590..07c2bdf 100644
--- a/framework/debugger.py
+++ b/framework/debugger.py
@@ -98,7 +98,7 @@ 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._execute_test_case(case)
 
 
 def exit_command():
diff --git a/framework/test_case.py b/framework/test_case.py
index 31a5eaf..2d1a58d 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,38 @@ 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):
+                    if self.execute_test_case(case_obj):
                         break
                     else:
                         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))
 
         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:
+            self._execute_test_case(case_obj)
 
     def get_result(self):
         return self._suite_result
-- 
1.9.3



More information about the dts mailing list