diff options
Diffstat (limited to 'dovetail/report.py')
-rw-r--r-- | dovetail/report.py | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/dovetail/report.py b/dovetail/report.py index 11e3c244..b7b27930 100644 --- a/dovetail/report.py +++ b/dovetail/report.py @@ -214,23 +214,44 @@ class FunctestCrawler(object): def crawl_from_file(self, testcase=None): dovetail_config = dt_cfg.dovetail_config - 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.info('result file not found: %s', file_path) - return None - - try: + criteria = 'FAIL' + timestart = 0 + testcase_duration = 0 + testcase_name = testcase.validate_testcase() + json_results = {} + if testcase_name in dt_cfg.dovetail_config['functest_testcase']: + 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.info('result file not found: %s', file_path) + return None + with open(file_path, 'r') as f: + for jsonfile in f: + data = json.loads(jsonfile) + if testcase_name == data['case_name']: + criteria = data['details']['status'] + timestart = data['details']['timestart'] + testcase_duration = data['details']['duration'] + + json_results = {'criteria': criteria, + 'details': {"timestart": timestart, + "duration": testcase_duration, + "tests": '', "failures": ''}} + elif 'tempest' in testcase_name: + file_path = \ + os.path.join(dovetail_config['result_dir'], + dovetail_config[self.type]['result']['tp_path']) + if not os.path.exists(file_path): + self.logger.info('result file not found: %s', file_path) + return None with open(file_path, 'r') as myfile: output = myfile.read() - error_logs = "" - for match in re.findall('(.*?)[. ]*FAILED', output): - error_logs += match + error_logs = " ".join(re.findall('(.*?)[. ]*fail ', output)) + skipped = " ".join(re.findall('(.*?)[. ]*skip:', output)) - criteria = 'PASS' - failed_num = int(re.findall(' - Failed: (\d*)', output)[0]) + failed_num = int(re.findall(' - Failures: (\d*)', output)[0]) if failed_num != 0: criteria = 'FAIL' @@ -239,13 +260,11 @@ class FunctestCrawler(object): json_results = {'criteria': criteria, 'details': {"timestart": '', "duration": int(dur_sec_int), "tests": int(num_tests), "failures": failed_num, - "errors": error_logs}} - self.logger.debug('Results: %s', str(json_results)) - return json_results - except Exception as e: - self.logger.error('Cannot read content from the file: %s, ' - 'exception: %s', file_path, e) - return None + "errors": error_logs, + "skipped": skipped}} + + self.logger.debug('Results: %s', str(json_results)) + return json_results def crawl_from_url(self, testcase=None): url = \ @@ -289,17 +308,15 @@ class YardstickCrawler(object): if not os.path.exists(file_path): self.logger.info('result file not found: %s', file_path) return None - try: - with open(file_path, 'r') as myfile: - myfile.read() - criteria = 'PASS' - json_results = {'criteria': criteria} - self.logger.debug('Results: %s', str(json_results)) - return json_results - except Exception as e: - self.logger.error('Cannot read content from the file: %s, ' - 'exception: %s', file_path, e) - return None + criteria = 'FAIL' + with open(file_path, 'r') as f: + for jsonfile in f: + data = json.loads(jsonfile) + if 1 == data['status']: + criteria = 'PASS' + json_results = {'criteria': criteria} + self.logger.debug('Results: %s', str(json_results)) + return json_results def crawl_from_url(self, testcase=None): return None @@ -378,6 +395,8 @@ class FunctestChecker(object): all_passed = True for sub_testcase in sub_testcase_list: self.logger.debug('check sub_testcase:%s', sub_testcase) + # TO DO: should think the test case when skipped, should think + # together with the "dovetail report" if sub_testcase in db_result['details']['errors']: testcase.sub_testcase_passed(sub_testcase, False) all_passed = False |