Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 1 | # test result tool - report text based test results |
| 2 | # |
| 3 | # Copyright (c) 2019, Intel Corporation. |
| 4 | # Copyright (c) 2019, Linux Foundation |
| 5 | # |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 6 | # SPDX-License-Identifier: GPL-2.0-only |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 7 | # |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 8 | |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 9 | import os |
| 10 | import glob |
| 11 | import json |
| 12 | import resulttool.resultutils as resultutils |
| 13 | from oeqa.utils.git import GitRepo |
| 14 | import oeqa.utils.gitarchive as gitarchive |
| 15 | |
| 16 | |
| 17 | class ResultsTextReport(object): |
| 18 | def __init__(self): |
| 19 | self.ptests = {} |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 20 | self.ltptests = {} |
| 21 | self.ltpposixtests = {} |
Brad Bishop | 79641f2 | 2019-09-10 07:20:22 -0400 | [diff] [blame] | 22 | self.result_types = {'passed': ['PASSED', 'passed', 'PASS', 'XFAIL'], |
| 23 | 'failed': ['FAILED', 'failed', 'FAIL', 'ERROR', 'error', 'UNKNOWN', 'XPASS'], |
| 24 | 'skipped': ['SKIPPED', 'skipped', 'UNSUPPORTED', 'UNTESTED', 'UNRESOLVED']} |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 25 | |
| 26 | |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 27 | def handle_ptest_result(self, k, status, result, machine): |
| 28 | if machine not in self.ptests: |
| 29 | self.ptests[machine] = {} |
| 30 | |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 31 | if k == 'ptestresult.sections': |
| 32 | # Ensure tests without any test results still show up on the report |
| 33 | for suite in result['ptestresult.sections']: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 34 | if suite not in self.ptests[machine]: |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 35 | self.ptests[machine][suite] = { |
| 36 | 'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', |
| 37 | 'failed_testcases': [], "testcases": set(), |
| 38 | } |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 39 | if 'duration' in result['ptestresult.sections'][suite]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 40 | self.ptests[machine][suite]['duration'] = result['ptestresult.sections'][suite]['duration'] |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 41 | if 'timeout' in result['ptestresult.sections'][suite]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 42 | self.ptests[machine][suite]['duration'] += " T" |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 43 | return True |
| 44 | |
| 45 | # process test result |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 46 | try: |
| 47 | _, suite, test = k.split(".", 2) |
| 48 | except ValueError: |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 49 | return True |
| 50 | |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 51 | # Handle 'glib-2.0' |
| 52 | if 'ptestresult.sections' in result and suite not in result['ptestresult.sections']: |
| 53 | try: |
| 54 | _, suite, suite1, test = k.split(".", 3) |
| 55 | if suite + "." + suite1 in result['ptestresult.sections']: |
| 56 | suite = suite + "." + suite1 |
| 57 | except ValueError: |
| 58 | pass |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 59 | |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 60 | if suite not in self.ptests[machine]: |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 61 | self.ptests[machine][suite] = { |
| 62 | 'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', |
| 63 | 'failed_testcases': [], "testcases": set(), |
| 64 | } |
| 65 | |
| 66 | # do not process duplicate results |
| 67 | if test in self.ptests[machine][suite]["testcases"]: |
| 68 | print("Warning duplicate ptest result '{}.{}' for {}".format(suite, test, machine)) |
| 69 | return False |
| 70 | |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 71 | for tk in self.result_types: |
| 72 | if status in self.result_types[tk]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 73 | self.ptests[machine][suite][tk] += 1 |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 74 | self.ptests[machine][suite]["testcases"].add(test) |
| 75 | return True |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 76 | |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 77 | def handle_ltptest_result(self, k, status, result, machine): |
| 78 | if machine not in self.ltptests: |
| 79 | self.ltptests[machine] = {} |
| 80 | |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 81 | if k == 'ltpresult.sections': |
| 82 | # Ensure tests without any test results still show up on the report |
| 83 | for suite in result['ltpresult.sections']: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 84 | if suite not in self.ltptests[machine]: |
| 85 | self.ltptests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 86 | if 'duration' in result['ltpresult.sections'][suite]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 87 | self.ltptests[machine][suite]['duration'] = result['ltpresult.sections'][suite]['duration'] |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 88 | if 'timeout' in result['ltpresult.sections'][suite]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 89 | self.ltptests[machine][suite]['duration'] += " T" |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 90 | return |
| 91 | try: |
| 92 | _, suite, test = k.split(".", 2) |
| 93 | except ValueError: |
| 94 | return |
| 95 | # Handle 'glib-2.0' |
| 96 | if 'ltpresult.sections' in result and suite not in result['ltpresult.sections']: |
| 97 | try: |
| 98 | _, suite, suite1, test = k.split(".", 3) |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 99 | if suite + "." + suite1 in result['ltpresult.sections']: |
| 100 | suite = suite + "." + suite1 |
| 101 | except ValueError: |
| 102 | pass |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 103 | if suite not in self.ltptests[machine]: |
| 104 | self.ltptests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 105 | for tk in self.result_types: |
| 106 | if status in self.result_types[tk]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 107 | self.ltptests[machine][suite][tk] += 1 |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 108 | |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 109 | def handle_ltpposixtest_result(self, k, status, result, machine): |
| 110 | if machine not in self.ltpposixtests: |
| 111 | self.ltpposixtests[machine] = {} |
| 112 | |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 113 | if k == 'ltpposixresult.sections': |
| 114 | # Ensure tests without any test results still show up on the report |
| 115 | for suite in result['ltpposixresult.sections']: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 116 | if suite not in self.ltpposixtests[machine]: |
| 117 | self.ltpposixtests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 118 | if 'duration' in result['ltpposixresult.sections'][suite]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 119 | self.ltpposixtests[machine][suite]['duration'] = result['ltpposixresult.sections'][suite]['duration'] |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 120 | return |
| 121 | try: |
| 122 | _, suite, test = k.split(".", 2) |
| 123 | except ValueError: |
| 124 | return |
| 125 | # Handle 'glib-2.0' |
| 126 | if 'ltpposixresult.sections' in result and suite not in result['ltpposixresult.sections']: |
| 127 | try: |
| 128 | _, suite, suite1, test = k.split(".", 3) |
| 129 | if suite + "." + suite1 in result['ltpposixresult.sections']: |
| 130 | suite = suite + "." + suite1 |
| 131 | except ValueError: |
| 132 | pass |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 133 | if suite not in self.ltpposixtests[machine]: |
| 134 | self.ltpposixtests[machine][suite] = {'passed': 0, 'failed': 0, 'skipped': 0, 'duration' : '-', 'failed_testcases': []} |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 135 | for tk in self.result_types: |
| 136 | if status in self.result_types[tk]: |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 137 | self.ltpposixtests[machine][suite][tk] += 1 |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 138 | |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 139 | def get_aggregated_test_result(self, logger, testresult, machine): |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 140 | test_count_report = {'passed': 0, 'failed': 0, 'skipped': 0, 'failed_testcases': []} |
| 141 | result = testresult.get('result', []) |
| 142 | for k in result: |
| 143 | test_status = result[k].get('status', []) |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 144 | if k.startswith("ptestresult."): |
| 145 | if not self.handle_ptest_result(k, test_status, result, machine): |
| 146 | continue |
| 147 | elif k.startswith("ltpresult."): |
| 148 | self.handle_ltptest_result(k, test_status, result, machine) |
| 149 | elif k.startswith("ltpposixresult."): |
| 150 | self.handle_ltpposixtest_result(k, test_status, result, machine) |
| 151 | |
| 152 | # process result if it was not skipped by a handler |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 153 | for tk in self.result_types: |
| 154 | if test_status in self.result_types[tk]: |
| 155 | test_count_report[tk] += 1 |
| 156 | if test_status in self.result_types['failed']: |
| 157 | test_count_report['failed_testcases'].append(k) |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 158 | return test_count_report |
| 159 | |
| 160 | def print_test_report(self, template_file_name, test_count_reports): |
| 161 | from jinja2 import Environment, FileSystemLoader |
| 162 | script_path = os.path.dirname(os.path.realpath(__file__)) |
| 163 | file_loader = FileSystemLoader(script_path + '/template') |
| 164 | env = Environment(loader=file_loader, trim_blocks=True) |
| 165 | template = env.get_template(template_file_name) |
| 166 | havefailed = False |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 167 | reportvalues = [] |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 168 | machines = [] |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 169 | cols = ['passed', 'failed', 'skipped'] |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 170 | maxlen = {'passed' : 0, 'failed' : 0, 'skipped' : 0, 'result_id': 0, 'testseries' : 0, 'ptest' : 0 ,'ltptest': 0, 'ltpposixtest': 0} |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 171 | for line in test_count_reports: |
| 172 | total_tested = line['passed'] + line['failed'] + line['skipped'] |
| 173 | vals = {} |
| 174 | vals['result_id'] = line['result_id'] |
| 175 | vals['testseries'] = line['testseries'] |
| 176 | vals['sort'] = line['testseries'] + "_" + line['result_id'] |
| 177 | vals['failed_testcases'] = line['failed_testcases'] |
| 178 | for k in cols: |
| 179 | vals[k] = "%d (%s%%)" % (line[k], format(line[k] / total_tested * 100, '.0f')) |
| 180 | for k in maxlen: |
| 181 | if k in vals and len(vals[k]) > maxlen[k]: |
| 182 | maxlen[k] = len(vals[k]) |
| 183 | reportvalues.append(vals) |
| 184 | if line['failed_testcases']: |
| 185 | havefailed = True |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 186 | if line['machine'] not in machines: |
| 187 | machines.append(line['machine']) |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 188 | reporttotalvalues = {} |
| 189 | for k in cols: |
| 190 | reporttotalvalues[k] = '%s' % sum([line[k] for line in test_count_reports]) |
| 191 | reporttotalvalues['count'] = '%s' % len(test_count_reports) |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 192 | for (machine, report) in self.ptests.items(): |
| 193 | for ptest in self.ptests[machine]: |
| 194 | if len(ptest) > maxlen['ptest']: |
| 195 | maxlen['ptest'] = len(ptest) |
| 196 | for (machine, report) in self.ltptests.items(): |
| 197 | for ltptest in self.ltptests[machine]: |
| 198 | if len(ltptest) > maxlen['ltptest']: |
| 199 | maxlen['ltptest'] = len(ltptest) |
| 200 | for (machine, report) in self.ltpposixtests.items(): |
| 201 | for ltpposixtest in self.ltpposixtests[machine]: |
| 202 | if len(ltpposixtest) > maxlen['ltpposixtest']: |
| 203 | maxlen['ltpposixtest'] = len(ltpposixtest) |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 204 | output = template.render(reportvalues=reportvalues, |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 205 | reporttotalvalues=reporttotalvalues, |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 206 | havefailed=havefailed, |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 207 | machines=machines, |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 208 | ptests=self.ptests, |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 209 | ltptests=self.ltptests, |
| 210 | ltpposixtests=self.ltpposixtests, |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 211 | maxlen=maxlen) |
| 212 | print(output) |
| 213 | |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 214 | def view_test_report(self, logger, source_dir, branch, commit, tag, use_regression_map, raw_test, selected_test_case_only): |
| 215 | def print_selected_testcase_result(testresults, selected_test_case_only): |
| 216 | for testsuite in testresults: |
| 217 | for resultid in testresults[testsuite]: |
| 218 | result = testresults[testsuite][resultid]['result'] |
| 219 | test_case_result = result.get(selected_test_case_only, {}) |
| 220 | if test_case_result.get('status'): |
| 221 | print('Found selected test case result for %s from %s' % (selected_test_case_only, |
| 222 | resultid)) |
| 223 | print(test_case_result['status']) |
| 224 | else: |
| 225 | print('Could not find selected test case result for %s from %s' % (selected_test_case_only, |
| 226 | resultid)) |
| 227 | if test_case_result.get('log'): |
| 228 | print(test_case_result['log']) |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 229 | test_count_reports = [] |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 230 | configmap = resultutils.store_map |
| 231 | if use_regression_map: |
| 232 | configmap = resultutils.regression_map |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 233 | if commit: |
| 234 | if tag: |
| 235 | logger.warning("Ignoring --tag as --commit was specified") |
| 236 | tag_name = "{branch}/{commit_number}-g{commit}/{tag_number}" |
| 237 | repo = GitRepo(source_dir) |
| 238 | revs = gitarchive.get_test_revs(logger, repo, tag_name, branch=branch) |
| 239 | rev_index = gitarchive.rev_find(revs, 'commit', commit) |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 240 | testresults = resultutils.git_get_result(repo, revs[rev_index][2], configmap=configmap) |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 241 | elif tag: |
| 242 | repo = GitRepo(source_dir) |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 243 | testresults = resultutils.git_get_result(repo, [tag], configmap=configmap) |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 244 | else: |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 245 | testresults = resultutils.load_resultsdata(source_dir, configmap=configmap) |
| 246 | if raw_test: |
| 247 | raw_results = {} |
| 248 | for testsuite in testresults: |
| 249 | result = testresults[testsuite].get(raw_test, {}) |
| 250 | if result: |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 251 | raw_results[testsuite] = {raw_test: result} |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 252 | if raw_results: |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 253 | if selected_test_case_only: |
| 254 | print_selected_testcase_result(raw_results, selected_test_case_only) |
| 255 | else: |
| 256 | print(json.dumps(raw_results, sort_keys=True, indent=4)) |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 257 | else: |
| 258 | print('Could not find raw test result for %s' % raw_test) |
| 259 | return 0 |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 260 | if selected_test_case_only: |
| 261 | print_selected_testcase_result(testresults, selected_test_case_only) |
| 262 | return 0 |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 263 | for testsuite in testresults: |
| 264 | for resultid in testresults[testsuite]: |
Brad Bishop | c68388fc | 2019-08-26 01:33:31 -0400 | [diff] [blame] | 265 | skip = False |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 266 | result = testresults[testsuite][resultid] |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 267 | machine = result['configuration']['MACHINE'] |
Brad Bishop | c68388fc | 2019-08-26 01:33:31 -0400 | [diff] [blame] | 268 | |
| 269 | # Check to see if there is already results for these kinds of tests for the machine |
| 270 | for key in result['result'].keys(): |
| 271 | testtype = str(key).split('.')[0] |
Brad Bishop | a34c030 | 2019-09-23 22:34:48 -0400 | [diff] [blame] | 272 | if ((machine in self.ltptests and testtype == "ltpiresult" and self.ltptests[machine]) or |
Brad Bishop | c68388fc | 2019-08-26 01:33:31 -0400 | [diff] [blame] | 273 | (machine in self.ltpposixtests and testtype == "ltpposixresult" and self.ltpposixtests[machine])): |
| 274 | print("Already have test results for %s on %s, skipping %s" %(str(key).split('.')[0], machine, resultid)) |
| 275 | skip = True |
| 276 | break |
| 277 | if skip: |
| 278 | break |
| 279 | |
Brad Bishop | 15ae250 | 2019-06-18 21:44:24 -0400 | [diff] [blame] | 280 | test_count_report = self.get_aggregated_test_result(logger, result, machine) |
| 281 | test_count_report['machine'] = machine |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 282 | test_count_report['testseries'] = result['configuration']['TESTSERIES'] |
| 283 | test_count_report['result_id'] = resultid |
| 284 | test_count_reports.append(test_count_report) |
| 285 | self.print_test_report('test_report_full_text.txt', test_count_reports) |
| 286 | |
| 287 | def report(args, logger): |
| 288 | report = ResultsTextReport() |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 289 | report.view_test_report(logger, args.source_dir, args.branch, args.commit, args.tag, args.use_regression_map, |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 290 | args.raw_test_only, args.selected_test_case_only) |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 291 | return 0 |
| 292 | |
| 293 | def register_commands(subparsers): |
| 294 | """Register subcommands from this plugin""" |
| 295 | parser_build = subparsers.add_parser('report', help='summarise test results', |
| 296 | description='print a text-based summary of the test results', |
| 297 | group='analysis') |
| 298 | parser_build.set_defaults(func=report) |
| 299 | parser_build.add_argument('source_dir', |
Brad Bishop | c342db3 | 2019-05-15 21:57:59 -0400 | [diff] [blame] | 300 | help='source file/directory/URL that contain the test result files to summarise') |
Brad Bishop | 40320b1 | 2019-03-26 16:08:25 -0400 | [diff] [blame] | 301 | parser_build.add_argument('--branch', '-B', default='master', help="Branch to find commit in") |
| 302 | parser_build.add_argument('--commit', help="Revision to report") |
| 303 | parser_build.add_argument('-t', '--tag', default='', |
| 304 | help='source_dir is a git repository, report on the tag specified from that repository') |
Brad Bishop | 1d80a2e | 2019-11-15 16:35:03 -0500 | [diff] [blame] | 305 | parser_build.add_argument('-m', '--use_regression_map', action='store_true', |
| 306 | help='instead of the default "store_map", use the "regression_map" for report') |
| 307 | parser_build.add_argument('-r', '--raw_test_only', default='', |
| 308 | help='output raw test result only for the user provided test result id') |
Andrew Geissler | 82c905d | 2020-04-13 13:39:40 -0500 | [diff] [blame] | 309 | parser_build.add_argument('-s', '--selected_test_case_only', default='', |
| 310 | help='output selected test case result for the user provided test case id, if both test ' |
| 311 | 'result id and test case id are provided then output the selected test case result ' |
| 312 | 'from the provided test result id') |