From c5c6dce10bfa43dacd3043ebe9942689eed8b9a4 Mon Sep 17 00:00:00 2001 From: SerenaFeng Date: Thu, 24 Nov 2016 10:32:53 +0800 Subject: abstract umbrella part to make integration code simpler implement an abstract class Umbrella, and take parser for instance JIRA: FUNCTEST-618 Change-Id: Iadf71ad49abd901b9659cb71135fc902a3b616d1 Signed-off-by: SerenaFeng --- functest/ci/run_tests.py | 4 +-- functest/core/feature_base.py | 58 ++++++++++++++++++++++++++++++ functest/opnfv_tests/vnf/rnc/parser.py | 65 ++++------------------------------ functest/utils/functest_utils.py | 17 --------- 4 files changed, 66 insertions(+), 78 deletions(-) create mode 100644 functest/core/feature_base.py diff --git a/functest/ci/run_tests.py b/functest/ci/run_tests.py index 7de1577d..3f02c872 100644 --- a/functest/ci/run_tests.py +++ b/functest/ci/run_tests.py @@ -140,9 +140,9 @@ def run_test(test, tier_name): cls = getattr(module, run_dict['class']) test_case = cls() result = test_case.run() - if (result == testcase_base.TestCasesBase.EX_OK and + if (result == testcase_base.TestcaseBase.EX_OK and GlobalVariables.REPORT_FLAG): - result = test_case.push_to_db() + test_case.push_to_db() except ImportError: logger.exception("Cannot import module {}".format( run_dict['module'])) diff --git a/functest/core/feature_base.py b/functest/core/feature_base.py new file mode 100644 index 00000000..01a27f30 --- /dev/null +++ b/functest/core/feature_base.py @@ -0,0 +1,58 @@ +import time + +import testcase_base as base +import functest.utils.functest_utils as ft_utils +import functest.utils.functest_logger as ft_logger + + +class FeatureBase(base.TestcaseBase): + def __init__(self, project='functest', case='', repo='', cmd=''): + super(FeatureBase, self).__init__() + self.project_name = project + self.case_name = case + self.cmd = cmd + self.repo = self.get_conf('general.directories.{}'.format(repo)) + self.result_file = self.get_result_file() + self.logger = ft_logger.Logger(project).getLogger() + + def run(self, **kwargs): + self.prepare() + self.start_time = time.time() + ret = ft_utils.execute_command(self.cmd, output_file=self.result_file) + self.stop_time = time.time() + self.post() + self.parse_results(ret) + self.log_results() + return base.TestcaseBase.EX_OK + + def prepare(self, **kwargs): + pass + + def post(self, **kwargs): + pass + + def parse_results(self, ret): + exit_code = base.TestcaseBase.EX_OK + if ret == 0: + self.logger.info("{} OK".format(self.project_name)) + self.criteria = 'PASS' + else: + self.logger.info("{} FAILED".format(self.project_name)) + exit_code = base.TestcaseBase.EX_RUN_ERROR + self.criteria = "FAIL" + + return exit_code + + def get_result_file(self): + dir = self.get_conf('general.directories.dir_results') + return "{}/{}.log".format(dir, self.project_name) + + def log_results(self): + ft_utils.logger_test_results(self.project_name, + self.case_name, + self.criteria, + self.details) + + @staticmethod + def get_conf(parameter): + return ft_utils.get_functest_config(parameter) diff --git a/functest/opnfv_tests/vnf/rnc/parser.py b/functest/opnfv_tests/vnf/rnc/parser.py index a50d4f1e..1cff7220 100644 --- a/functest/opnfv_tests/vnf/rnc/parser.py +++ b/functest/opnfv_tests/vnf/rnc/parser.py @@ -14,66 +14,13 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os -import sys -import time -import argparse +import functest.core.feature_base as base -import functest.core.testcase_base as testcase_base -import functest.utils.functest_constants as ft_constants -import functest.utils.functest_logger as ft_logger -import functest.utils.functest_utils as ft_utils - - -class Parser(testcase_base.TestcaseBase): +class Parser(base.FeatureBase): def __init__(self): - super(Parser, self).__init__() - self.project_name = "parser" - self.case_name = "parser-basics" - self.logger = ft_logger.Logger("parser").getLogger() - self.log_file = os.path.join( - ft_constants.FUNCTEST_RESULTS_DIR, "parser.log") - - def run(self, **kwargs): - cmd = 'cd %s/tests && ./functest_run.sh' % ft_constants.PARSER_REPO_DIR - - self.start_time = time.time() - ret = ft_utils.execute_command(cmd, - info=True, - output_file=self.log_file) - self.stop_time = time.time() - - self.criteria, details = ft_utils.check_test_result(self.project_name, - ret, - self.start_time, - self.stop_time) - - ft_utils.logger_test_results(self.project_name, - self.case_name, - self.criteria, - details) - - return ret - - @staticmethod - def get_conf(parameter): - return ft_utils.get_functest_config(parameter) - - -if __name__ == '__main__': - args_parser = argparse.ArgumentParser() - args_parser.add_argument("-r", "--report", - help="Create json result file", - action="store_true") - args = vars(args_parser.parse_args()) - parser = Parser() - try: - result = parser.run(**args) - if result != testcase_base.TestcaseBase.EX_OK: - sys.exit(result) - if args['report']: - sys.exit(parser.push_to_db()) - except Exception: - sys.exit(testcase_base.TestcaseBase.EX_RUN_ERROR) + super(Parser, self).__init__(project='parser', + case='parser-basics', + repo='dir_repo_parser') + self.cmd = 'cd %s/tests && ./functest_run.sh' % self.repo diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py index a25967b6..3fafd4bf 100644 --- a/functest/utils/functest_utils.py +++ b/functest/utils/functest_utils.py @@ -418,23 +418,6 @@ def merge_dicts(dict1, dict2): yield (k, dict2[k]) -def check_test_result(test_name, ret, start_time, stop_time): - def get_criteria_value(): - return get_criteria_by_test(test_name).split('==')[1].strip() - - status = 'FAIL' - if str(ret) == get_criteria_value(): - status = 'PASS' - - details = { - 'timestart': start_time, - 'duration': round(stop_time - start_time, 1), - 'status': status, - } - - return status, details - - def get_testcases_file_dir(): return "/home/opnfv/repos/functest/functest/ci/testcases.yaml" -- cgit 1.2.3-korg