diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2012-12-17 00:54:58 -0800 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2012-12-17 00:54:58 -0800 |
commit | ffde5dec5c9e45d8e79e5f97710439ad75390d75 (patch) | |
tree | 6353ca9a87ed245e0fdfdad98c41a25c2722aca7 | |
parent | 9ae5537647144f2bd85578eb7a37daf4fc53a31b (diff) |
result detail generation
-rw-r--r-- | framework/database.py | 4 | ||||
-rwxr-xr-x | programs/report.py | 50 |
2 files changed, 38 insertions, 16 deletions
diff --git a/framework/database.py b/framework/database.py index a7415a7..4087d50 100644 --- a/framework/database.py +++ b/framework/database.py @@ -92,6 +92,6 @@ class ResultDatabase: def getResults(self, run): c = self.connection.cursor() - query = 'SELECT test_name, result, return_code, errors, output FROM results WHERE run_name = ?' + query = 'SELECT test_name, command, result, return_code, errors, output FROM results WHERE run_name = ?' rs = c.execute(query, [run]) - return dict([(r[0], {'result': r[1], 'return_code': r[2], 'errors': r[3], 'output': r[4]}) for r in rs]) + return dict([(r[0], {'command': r[1], 'result': r[2], 'return_code': r[3], 'errors': r[4], 'output': r[5]}) for r in rs]) diff --git a/programs/report.py b/programs/report.py index 7cf93df..6119899 100755 --- a/programs/report.py +++ b/programs/report.py @@ -40,7 +40,9 @@ def writefile(filename, text): templateDir = path.join(path.dirname(path.realpath(__file__)), 'templates') templates = { - 'index': readfile(path.join(templateDir, 'index.html')) + 'index': readfile(path.join(templateDir, 'index.html')), + 'result_test': readfile(path.join(templateDir, 'result_test.html')), + 'result_detail': readfile(path.join(templateDir, 'result_detail.html')), } ############################################################################# @@ -135,10 +137,10 @@ def build_navbox(current_page): return ''.join([link(p[0], p[1]) for p in pages]) -def testResult(run_name, full_name, status): +def testResult(run_name, full_name, status, detail_filename): html = '<a class="%(status)s" href="%(link)s">%(status)s</a>' % { 'status': status if status else 'skip', - 'link': path.join(run_name, escape(full_name) + '.html') + 'link': path.join(escape(run_name), detail_filename) } return html @@ -169,7 +171,7 @@ def buildGroupResultHeader(p): return '<div class="head %(status)s">%(pass)d/%(total)d</div>' % { 'status': status, 'total': p.totalRun(), 'pass': p.passnr } -def buildTable(run_names, results): +def buildTable(run_names, results, detailFilenames): # If the test list is empty, just return now. if not results: return ('', ['']) @@ -212,7 +214,7 @@ def buildTable(run_names, results): stack[-1].name_html += '<div>' + test + '</div>\n'; for i in range(num_runs): passv = toPassVector(results[full_test][i]['result']) - html = testResult(run_names[i], full_test, results[full_test][i]['result']) + html = testResult(run_names[i], full_test, results[full_test][i]['result'], detailFilenames[full_test]) stack[-1].results[i].add(passv) stack[-1].column_html[i] += html @@ -224,8 +226,8 @@ def buildTable(run_names, results): return (stack[0].name_html, stack[0].column_html) -def writeSummaryHtml(run_names, results, resultsDir, page, filename): - names, columns = buildTable(run_names, results) +def writeSummaryHtml(run_names, results, resultsDir, page, filename, detailFilenames): + names, columns = buildTable(run_names, results, detailFilenames) def makeColumn(name, contents): return ''.join(['<div class="resultColumn"><a class="title" href="%s/index.html">%s</a>' % (escape(name), name), contents, '</div>']) @@ -241,12 +243,28 @@ def writeSummaryHtml(run_names, results, resultsDir, page, filename): }) ############################################################################# -##### Detail pages +##### Detail page generation ############################################################################# -def writeDetailPages(run_name, results, i): +def interesting(r): + return r and r['result'] and r['result'] != 'skip' and r['result'] != 'pass' + +# Create result<N>.html pages containing the test result details for a +# single testrun. +def writeDetailPages(dirname, run_name, results, filenames, col): + pages = {} for test in results.keys(): - result = results[test][i] + r = results[test][col] + if interesting(r): + p = filenames[test] + if p not in pages: + pages[p] = [] + + pages[p].append(templates['result_test'] % dict(r, test=test, run=run_name)) + + for p in pages.keys(): + writefile(path.join(dirname, p), + templates['result_detail'] % {'run': run_name, 'details': ''.join(pages[p])}) ############################################################################# ##### Main program @@ -298,18 +316,22 @@ def main(argv, config): results = getCombinedResults(db, run_names, args.intersect) - for i in range(len(run_names)): - dirname = path.join(reportDir, escape(run_names[i])) + detailFilenames = {} + for i, test in enumerate(results.keys()): + detailFilenames[test] = 'result%d.html' % (i % 100) + + for col in range(len(run_names)): + dirname = path.join(reportDir, escape(run_names[col])) os.mkdir(dirname) # XXX: write system info - writeDetailPages(run_names[i], results, i) + writeDetailPages(dirname, run_names[col], results, detailFilenames, col) def writeSummaryPage(page, filename, filterFunc = None): cut_results = {} for t in results.keys(): if filterFunc is None or filterFunc([r['result'] for r in results[t]]): cut_results[t] = results[t] - writeSummaryHtml(run_names, cut_results, reportDir, page, filename) + writeSummaryHtml(run_names, cut_results, reportDir, page, filename, detailFilenames) os.link(path.join(templateDir, 'index.css'), path.join(reportDir, 'index.css')) |