summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Ollivier <cedric.ollivier@orange.com>2018-02-19 20:17:35 +0000
committerGerrit Code Review <gerrit@opnfv.org>2018-02-19 20:17:35 +0000
commitde3160230a010e5fd2aaf03630e31e807aeee34f (patch)
tree0e7ba5bdea8f222f8e09362ce6103e24d91dd2c6
parentc49ada60d6b5390ea7e28d4e681195ad759b5214 (diff)
parent916e12ca41b90d581d44f78e5be3db15daf875c8 (diff)
Merge "Generate tempest verification report (HTML)"
-rw-r--r--functest/opnfv_tests/openstack/tempest/tempest.py14
-rw-r--r--functest/tests/unit/openstack/tempest/test_tempest.py23
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)