Implement TestCase __str__() 95/34395/2
authorCédric Ollivier <cedric.ollivier@orange.com>
Sat, 6 May 2017 07:32:36 +0000 (09:32 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Sat, 6 May 2017 07:41:31 +0000 (09:41 +0200)
It's designed to be called by run_tests.py when printing the results of
test cases and when generating the global report.

Change-Id: If4a6f023ef2344bbc4f940d07dde4b776dce5d68
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
functest/ci/run_tests.py
functest/core/testcase.py
functest/tests/unit/core/test_testcase.py

index ae002c2..1396644 100755 (executable)
@@ -155,6 +155,7 @@ def run_test(test, tier_name, testcases=None):
                     test_case.push_to_db()
                 result = test_case.is_successful()
             duration = test_case.get_duration()
+            logger.info("\n%s\n", test_case)
         except ImportError:
             logger.exception("Cannot import module {}".format(
                 run_dict['module']))
@@ -167,8 +168,6 @@ def run_test(test, tier_name, testcases=None):
     if test.needs_clean() and GlobalVariables.CLEAN_FLAG:
         cleanup()
 
-    logger.info("Test execution time: %s", duration)
-
     if result != testcase.TestCase.EX_OK:
         logger.error("The test case '%s' failed. " % test_name)
         GlobalVariables.OVERALL_RESULT = Result.EX_ERROR
index 6246554..b220a58 100644 (file)
@@ -43,6 +43,21 @@ class TestCase(object):
         self.start_time = ""
         self.stop_time = ""
 
+    def __str__(self):
+        try:
+            assert self.project_name
+            assert self.case_name
+            result = 'PASS' if(self.is_successful(
+                ) == TestCase.EX_OK) else 'FAIL'
+            return ('| {0:<23} | {1:<13} | {2:<10} | {3:<13} |'
+                    '\n{4:-<26}{4:-<16}{4:-<13}{4:-<16}{4}'.format(
+                        self.case_name, self.project_name,
+                        self.get_duration(), result, '+'))
+        except AssertionError:
+            self.__logger.error("We cannot print invalid objects")
+            return '| {0:^68} |\n{1:-<26}{1:-<16}{1:-<13}{1:-<16}{1}'.format(
+                'INVALID OBJECT', '+')
+
     def get_duration(self):
         """Return the duration of the test case.
 
@@ -57,7 +72,7 @@ class TestCase(object):
                 return "XX:XX"
             return "{0[0]:02.0f}:{0[1]:02.0f}".format(divmod(
                 self.stop_time - self.start_time, 60))
-        except Exception:
+        except Exception:  # pylint: disable=broad-except
             self.__logger.error("Please run test before getting the duration")
             return "XX:XX"
 
index 17329ea..b25ce22 100644 (file)
@@ -189,6 +189,39 @@ class TestCaseTesting(unittest.TestCase):
         self.test.stop_time = 180
         self.assertEqual(self.test.get_duration(), "02:59")
 
+    def test_str_project_name_ko(self):
+        self.test.project_name = None
+        self.assertIn("INVALID OBJECT", str(self.test))
+
+    def test_str_case_name_ko(self):
+        self.test.case_name = None
+        self.assertIn("INVALID OBJECT", str(self.test))
+
+    def test_str_pass(self):
+        duration = '01:01'
+        with mock.patch.object(self.test, 'get_duration',
+                               return_value=duration), \
+                mock.patch.object(self.test, 'is_successful',
+                                  return_value=testcase.TestCase.EX_OK):
+            message = str(self.test)
+        self.assertIn(self._project_name, message)
+        self.assertIn(self._case_name, message)
+        self.assertIn(duration, message)
+        self.assertIn('PASS', message)
+
+    def test_str_fail(self):
+        duration = '00:59'
+        with mock.patch.object(self.test, 'get_duration',
+                               return_value=duration), \
+                mock.patch.object(
+                    self.test, 'is_successful',
+                    return_value=testcase.TestCase.EX_TESTCASE_FAILED):
+            message = str(self.test)
+        self.assertIn(self._project_name, message)
+        self.assertIn(self._case_name, message)
+        self.assertIn(duration, message)
+        self.assertIn('FAIL', message)
+
 
 if __name__ == "__main__":
     unittest.main(verbosity=2)