Generate tempest verification report (HTML)
authorJuha Kosonen <juha.kosonen@nokia.com>
Mon, 19 Feb 2018 15:47:08 +0000 (17:47 +0200)
committerJuha Kosonen <juha.kosonen@nokia.com>
Mon, 19 Feb 2018 15:47:08 +0000 (17:47 +0200)
JIRA: FUNCTEST-934

Change-Id: I2befbd3f2b2311f69b24321c7e9544fb43df3a9d
Signed-off-by: Juha Kosonen <juha.kosonen@nokia.com>
functest/opnfv_tests/openstack/tempest/tempest.py
functest/tests/unit/openstack/tempest/test_tempest.py

index 105d165..d474ec3 100644 (file)
@@ -193,11 +193,11 @@ class TempestCommon(testcase.TestCase):
         f_stdout.close()
         f_stderr.close()
 
-    def parse_verifier_result(self):
-        """Parse and save test results."""
         if self.verification_id is None:
             raise Exception('Verification UUID not found')
 
+    def parse_verifier_result(self):
+        """Parse and save test results."""
         stat = self.get_verifier_result(self.verification_id)
         try:
             num_executed = stat['num_tests'] - stat['num_skipped']
@@ -236,6 +236,15 @@ class TempestCommon(testcase.TestCase):
         LOGGER.info("Tempest %s success_rate is %s%%",
                     self.case_name, self.result)
 
+    def generate_report(self):
+        """Generate verification report."""
+        html_file = os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+                                 "tempest-report.html")
+        cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
+               self.verification_id, "--to", html_file]
+        subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                         stderr=subprocess.STDOUT)
+
     def run(self, **kwargs):
 
         self.start_time = time.time()
@@ -255,6 +264,7 @@ class TempestCommon(testcase.TestCase):
             self.apply_tempest_blacklist()
             self.run_verifier_tests()
             self.parse_verifier_result()
+            self.generate_report()
             res = testcase.TestCase.EX_OK
         except Exception as err:  # pylint: disable=broad-except
             LOGGER.error('Error with run: %s', err)
index c4c8a77..77cf28a 100644 (file)
@@ -147,9 +147,22 @@ class OSTempestTesting(unittest.TestCase):
             conf_utils.TEMPEST_LIST = 'test_tempest_list'
             cmd = ["rally", "verify", "start", "--load-list",
                    conf_utils.TEMPEST_LIST]
-            self.tempestcommon.run_verifier_tests()
-            mock_logger_info. \
-                assert_any_call("Starting Tempest test suite: '%s'.", cmd)
+            with self.assertRaises(Exception):
+                self.tempestcommon.run_verifier_tests()
+                mock_logger_info. \
+                    assert_any_call("Starting Tempest test suite: '%s'.", cmd)
+
+    @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+                'subprocess.Popen')
+    def test_generate_report(self, mock_popen):
+        self.tempestcommon.verification_id = "1234"
+        html_file = os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+                                 "tempest-report.html")
+        cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
+               "1234", "--to", html_file]
+        self.tempestcommon.generate_report()
+        mock_popen.assert_called_once_with(cmd, stdout=mock.ANY,
+                                           stderr=mock.ANY)
 
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
                 'os.path.exists', return_value=False)
@@ -245,7 +258,9 @@ class OSTempestTesting(unittest.TestCase):
                 mock.patch.object(self.tempestcommon,
                                   'apply_tempest_blacklist'), \
                 mock.patch.object(self.tempestcommon, 'run_verifier_tests'), \
-                mock.patch.object(self.tempestcommon, 'parse_verifier_result'):
+                mock.patch.object(self.tempestcommon,
+                                  'parse_verifier_result'), \
+                mock.patch.object(self.tempestcommon, 'generate_report'):
             self._test_run(testcase.TestCase.EX_OK)