summaryrefslogtreecommitdiffstats
path: root/dovetail/report.py
diff options
context:
space:
mode:
authorxudan <xudan16@huawei.com>2018-05-24 04:47:41 -0400
committerGeorg Kunz <georg.kunz@ericsson.com>2018-05-27 20:19:34 +0000
commit01e07c1c56d8a40cff50b077b18157decca39a5c (patch)
treeda7b0e2d72dc8548388272e07db37107833bc8c9 /dovetail/report.py
parent3c0569b1e16f35d4b14a60ed25113d6d7a398272 (diff)
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 <xudan16@huawei.com>
Diffstat (limited to 'dovetail/report.py')
-rw-r--r--dovetail/report.py71
1 files changed, 41 insertions, 30 deletions
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