From d37f6a64ed9aa88bd73d0c0fe6d774d91286420c Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Sat, 6 May 2017 09:32:36 +0200 Subject: Implement TestCase __str__() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- functest/ci/run_tests.py | 3 +-- functest/core/testcase.py | 17 +++++++++++++++- functest/tests/unit/core/test_testcase.py | 33 +++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) (limited to 'functest') diff --git a/functest/ci/run_tests.py b/functest/ci/run_tests.py index ae002c2e3..1396644f7 100755 --- a/functest/ci/run_tests.py +++ b/functest/ci/run_tests.py @@ -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 diff --git a/functest/core/testcase.py b/functest/core/testcase.py index 624655424..b220a587d 100644 --- a/functest/core/testcase.py +++ b/functest/core/testcase.py @@ -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" diff --git a/functest/tests/unit/core/test_testcase.py b/functest/tests/unit/core/test_testcase.py index 17329ea32..b25ce2260 100644 --- a/functest/tests/unit/core/test_testcase.py +++ b/functest/tests/unit/core/test_testcase.py @@ -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) -- cgit 1.2.3-korg From a212763c3e9f4cf6d52200aa614e42a911c5dbf7 Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Tue, 9 May 2017 16:59:49 +0200 Subject: Remove the former results in DB url MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It conforms generate_report.py with the previous change [1]. [1] https://gerrit.opnfv.org/gerrit/#/c/33511/ Change-Id: I677ebd416f462a591439fc7b637c02d7964e6173 Signed-off-by: Cédric Ollivier --- functest/ci/generate_report.py | 6 +++--- functest/tests/unit/ci/test_generate_report.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'functest') diff --git a/functest/ci/generate_report.py b/functest/ci/generate_report.py index 17240e8c0..e400b1b64 100644 --- a/functest/ci/generate_report.py +++ b/functest/ci/generate_report.py @@ -39,8 +39,8 @@ def init(tiers_to_run=[]): def get_results_from_db(): - url = "%s/results?build_tag=%s" % (ft_utils.get_db_url(), - CONST.BUILD_TAG) + url = "%s?build_tag=%s" % (ft_utils.get_db_url(), + CONST.BUILD_TAG) logger.debug("Query to rest api: %s" % url) try: data = json.load(urllib2.urlopen(url)) @@ -56,7 +56,7 @@ def get_data(test, results): for test_db in results: if test['test_name'] in test_db['case_name']: id = test_db['_id'] - url = ft_utils.get_db_url() + '/results/' + id + url = ft_utils.get_db_url() + '/' + id test_result = test_db['criteria'] return {"url": url, "result": test_result} diff --git a/functest/tests/unit/ci/test_generate_report.py b/functest/tests/unit/ci/test_generate_report.py index 13361c1d1..2c5ce2ea8 100644 --- a/functest/tests/unit/ci/test_generate_report.py +++ b/functest/tests/unit/ci/test_generate_report.py @@ -28,16 +28,16 @@ class GenerateReportTesting(unittest.TestCase): @mock.patch('functest.ci.generate_report.urllib2.urlopen', side_effect=urllib2.URLError('no host given')) def test_get_results_from_db_fail(self, mock_method): - url = "%s/results?build_tag=%s" % (ft_utils.get_db_url(), - CONST.__getattribute__('BUILD_TAG')) + url = "%s?build_tag=%s" % (ft_utils.get_db_url(), + CONST.__getattribute__('BUILD_TAG')) self.assertIsNone(gen_report.get_results_from_db()) mock_method.assert_called_once_with(url) @mock.patch('functest.ci.generate_report.urllib2.urlopen', return_value={'results': []}) def test_get_results_from_db_success(self, mock_method): - url = "%s/results?build_tag=%s" % (ft_utils.get_db_url(), - CONST.__getattribute__('BUILD_TAG')) + url = "%s?build_tag=%s" % (ft_utils.get_db_url(), + CONST.__getattribute__('BUILD_TAG')) self.assertEqual(gen_report.get_results_from_db(), None) mock_method.assert_called_once_with(url) -- cgit 1.2.3-korg