output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
LOGGER.info("%s\n%s", " ".join(cmd), output)
- # save report as HTML
- report_html_name = '{}.html'.format(test_name)
- report_html_dir = os.path.join(self.results_dir, report_html_name)
- cmd = (["rally", "task", "report", "--html", "--uuid", task_id,
- "--out", report_html_dir])
- LOGGER.debug('running command: %s', cmd)
- output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
- LOGGER.info("%s\n%s", " ".join(cmd), output)
-
json_results = open(report_json_dir).read()
self._append_summary(json_results, test_name)
'nb success': success_rate}})
self.details = payload
+ def generate_html_report(self):
+ """Save all task reports as single HTML
+
+ Raises:
+ subprocess.CalledProcessError: if Rally doesn't return 0
+
+ Returns:
+ None
+ """
+ cmd = ["rally", "task", "report", "--deployment",
+ str(getattr(config.CONF, 'rally_deployment_name')),
+ "--out", "{}/{}.html".format(self.results_dir, self.case_name)]
+ LOGGER.debug('running command: %s', cmd)
+ output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+ LOGGER.info("%s\n%s", " ".join(cmd), output)
+
def clean(self):
"""Cleanup of OpenStack resources. Should be called on completion."""
self.clean_rally_conf()
self.prepare_run()
self.run_tests(**kwargs)
self._generate_report()
+ self.generate_html_report()
res = testcase.TestCase.EX_OK
except Exception as exc: # pylint: disable=broad-except
LOGGER.error('Error with run: %s', exc)
import json
import logging
import os
+import subprocess
import unittest
import mock
from xtesting.core import testcase
from functest.opnfv_tests.openstack.rally import rally
+from functest.utils import config
class OSRallyTesting(unittest.TestCase):
'run_tests')
@mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
'_generate_report')
+ @mock.patch('functest.opnfv_tests.openstack.rally.rally.RallyBase.'
+ 'generate_html_report')
def test_run_default(self, *args):
self.assertEqual(self.rally_base.run(), testcase.TestCase.EX_OK)
for func in args:
self.assertEqual(self.rally_base.is_successful(), 424)
mock_super(rally.RallyBase, self).is_successful.assert_called()
+ @mock.patch('subprocess.check_output',
+ side_effect=subprocess.CalledProcessError('', ''))
+ def test_generate_html_report_ko(self, *args):
+ with self.assertRaises(subprocess.CalledProcessError):
+ self.rally_base.generate_html_report()
+ cmd = ["rally", "task", "report", "--deployment",
+ str(getattr(config.CONF, 'rally_deployment_name')),
+ "--out", "{}/{}.html".format(
+ self.rally_base.results_dir, self.rally_base.case_name)]
+ args[0].assert_called_with(cmd, stderr=subprocess.STDOUT)
+
+ @mock.patch('subprocess.check_output', return_value=None)
+ def test_generate_html_report(self, *args):
+ self.assertEqual(self.rally_base.generate_html_report(), None)
+ cmd = ["rally", "task", "report", "--deployment",
+ str(getattr(config.CONF, 'rally_deployment_name')),
+ "--out", "{}/{}.html".format(
+ self.rally_base.results_dir, self.rally_base.case_name)]
+ args[0].assert_called_with(cmd, stderr=subprocess.STDOUT)
+
if __name__ == "__main__":
logging.disable(logging.CRITICAL)