From 01e07c1c56d8a40cff50b077b18157decca39a5c Mon Sep 17 00:00:00 2001 From: xudan Date: Thu, 24 May 2018 04:47:41 -0400 Subject: Archive all test case result files 1. All detailed tempest test cases results are recorded with file tempest-report.html rather than tempest.log now. 2. Archive all results files include functest.log, yardstick.log ... for each test case. Otherwise, they will all be in one log file. 3. Support to set the source files and dest files need to be archived with the test case config files rather than hardcode with the source code. 4. Give the file which used to be parse the results (PASS/FAIL) with the test case config files rather than hardcode with the source code. Change-Id: I30f435d91ab90cf20def47007f177fe98187484d Signed-off-by: xudan --- dovetail/report.py | 71 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 30 deletions(-) (limited to 'dovetail/report.py') diff --git a/dovetail/report.py b/dovetail/report.py index 20475a3b..9808c7a5 100644 --- a/dovetail/report.py +++ b/dovetail/report.py @@ -35,8 +35,31 @@ class Report(object): def create_log(cls): cls.logger = dt_logger.Logger(__name__ + '.Report').getLogger() + @classmethod + def check_tc_result(cls, testcase): + result_path = dt_cfg.dovetail_config['result_dir'] + check_results_file = dt_utils.get_value_from_dict( + 'report.check_results_file', testcase.testcase) + if not check_results_file: + cls.logger.error("Failed to get 'check_results_file' from config " + "file of test case {}".format(testcase.name())) + cls.check_result(testcase) + return None + result_file = os.path.join(result_path, check_results_file) + if os.path.isfile(result_file): + cls.logger.info( + "Results have been stored with file {}.".format(result_file)) + result = cls.get_result(testcase, result_file) + cls.check_result(testcase, result) + return result + else: + cls.logger.error( + "Failed to store results with file {}.".format(result_file)) + cls.check_result(testcase) + return None + @staticmethod - def check_result(testcase, db_result): + def check_result(testcase, db_result=None): checker = CheckerFactory.create(testcase.validate_type()) if checker is not None: checker.check(testcase, db_result) @@ -163,7 +186,7 @@ class Report(object): os.chdir(cwd) @classmethod - def get_result(cls, testcase): + def get_result(cls, testcase, check_results_file): validate_testcase = testcase.validate_testcase() type = testcase.validate_type() crawler = CrawlerFactory.create(type) @@ -174,7 +197,7 @@ class Report(object): # if validate_testcase in cls.results[type]: # return cls.results[type][validate_testcase] - result = crawler.crawl(testcase) + result = crawler.crawl(testcase, check_results_file) if result is not None: cls.results[type][validate_testcase] = result @@ -216,10 +239,10 @@ class FunctestCrawler(Crawler): cls.logger = \ dt_logger.Logger(__name__ + '.FunctestCrawler').getLogger() - def crawl(self, testcase=None): - return self.crawl_from_file(testcase) + def crawl(self, testcase, file_path): + return self.crawl_from_file(testcase, file_path) - def crawl_from_file(self, testcase=None): + def crawl_from_file(self, testcase, file_path): dovetail_config = dt_cfg.dovetail_config criteria = 'FAIL' details = {} @@ -228,9 +251,6 @@ class FunctestCrawler(Crawler): duration = 0 testcase_name = testcase.validate_testcase() build_tag = '%s-%s' % (dovetail_config['build_tag'], testcase.name()) - file_path = \ - os.path.join(dovetail_config['result_dir'], - dovetail_config[self.type]['result']['file_path']) if not os.path.exists(file_path): self.logger.error('Result file not found: {}'.format(file_path)) return None @@ -293,12 +313,10 @@ class YardstickCrawler(Crawler): cls.logger = \ dt_logger.Logger(__name__ + '.YardstickCrawler').getLogger() - def crawl(self, testcase=None): - return self.crawl_from_file(testcase) + def crawl(self, testcase, file_path): + return self.crawl_from_file(testcase, file_path) - def crawl_from_file(self, testcase=None): - file_path = os.path.join(dt_cfg.dovetail_config['result_dir'], - testcase.name() + '.out') + def crawl_from_file(self, testcase, file_path): if not os.path.exists(file_path): self.logger.error('Result file not found: {}'.format(file_path)) return None @@ -340,12 +358,10 @@ class BottlenecksCrawler(Crawler): cls.logger = \ dt_logger.Logger(__name__ + '.BottlenecksCrawler').getLogger() - def crawl(self, testcase=None): - return self.crawl_from_file(testcase) + def crawl(self, testcase, file_path): + return self.crawl_from_file(testcase, file_path) - def crawl_from_file(self, testcase=None): - file_path = os.path.join(dt_cfg.dovetail_config['result_dir'], - testcase.name() + '.out') + def crawl_from_file(self, testcase, file_path): if not os.path.exists(file_path): self.logger.error('Result file not found: {}'.format(file_path)) return None @@ -370,12 +386,10 @@ class ShellCrawler(Crawler): def __init__(self): self.type = 'shell' - def crawl(self, testcase=None): - return self.crawl_from_file(testcase) + def crawl(self, testcase, file_path): + return self.crawl_from_file(testcase, file_path) - def crawl_from_file(self, testcase=None): - file_path = os.path.join(dt_cfg.dovetail_config['result_dir'], - testcase.name()) + '.out' + def crawl_from_file(self, testcase, file_path): if not os.path.exists(file_path): return None try: @@ -399,13 +413,10 @@ class VnftestCrawler(Crawler): cls.logger = \ dt_logger.Logger(__name__ + '.VnftestCrawler').getLogger() - def crawl(self, testcase): - return self.crawl_from_file(testcase) - - def crawl_from_file(self, testcase): + def crawl(self, testcase, file_path): + return self.crawl_from_file(testcase, file_path) - file_path = os.path.join(dt_cfg.dovetail_config['result_dir'], - testcase.name() + '.out') + def crawl_from_file(self, testcase, file_path): if not os.path.exists(file_path): self.logger.error('Result file not found: {}'.format(file_path)) return None -- cgit 1.2.3-korg