From 916e12ca41b90d581d44f78e5be3db15daf875c8 Mon Sep 17 00:00:00 2001 From: Juha Kosonen Date: Mon, 19 Feb 2018 17:47:08 +0200 Subject: Generate tempest verification report (HTML) JIRA: FUNCTEST-934 Change-Id: I2befbd3f2b2311f69b24321c7e9544fb43df3a9d Signed-off-by: Juha Kosonen --- functest/opnfv_tests/openstack/tempest/tempest.py | 14 +++++++++++-- .../tests/unit/openstack/tempest/test_tempest.py | 23 ++++++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/functest/opnfv_tests/openstack/tempest/tempest.py b/functest/opnfv_tests/openstack/tempest/tempest.py index 105d16552..d474ec3a9 100644 --- a/functest/opnfv_tests/openstack/tempest/tempest.py +++ b/functest/opnfv_tests/openstack/tempest/tempest.py @@ -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) diff --git a/functest/tests/unit/openstack/tempest/test_tempest.py b/functest/tests/unit/openstack/tempest/test_tempest.py index c4c8a7772..77cf28afa 100644 --- a/functest/tests/unit/openstack/tempest/test_tempest.py +++ b/functest/tests/unit/openstack/tempest/test_tempest.py @@ -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) -- cgit 1.2.3-korg