From 60c217b193dae8aee471fa07505020d1903a8035 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 5 Oct 2015 17:38:16 +0200 Subject: [PATCH] add merge-junit-results script (#8425) --- merge-junit-results.py | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 merge-junit-results.py diff --git a/merge-junit-results.py b/merge-junit-results.py new file mode 100755 index 0000000..fa8fe61 --- /dev/null +++ b/merge-junit-results.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# +# Corey Goldberg, Dec 2012 +# + +import os +import sys +import xml.etree.ElementTree as ET + + +"""Merge multiple JUnit XML files into a single results file. +Output dumps to sdtdout. +example usage: + $ python merge_junit_results.py results1.xml results2.xml > results.xml +""" + + +def main(): + args = sys.argv[1:] + if not args: + usage() + sys.exit(2) + if '-h' in args or '--help' in args: + usage() + sys.exit(2) + merge_results(args[:]) + + +def merge_results(xml_files): + failures = 0 + tests = 0 + errors = 0 + time = 0.0 + cases = [] + + for file_name in xml_files: + tree = ET.parse(file_name) + test_suite = tree.getroot() + failures += int(test_suite.attrib['failures']) + tests += int(test_suite.attrib['tests']) + errors += int(test_suite.attrib['errors']) + time += float(test_suite.attrib['time']) + cases.append(test_suite.getchildren()) + + new_root = ET.Element('testsuite') + new_root.attrib['failures'] = '%s' % failures + new_root.attrib['tests'] = '%s' % tests + new_root.attrib['errors'] = '%s' % errors + new_root.attrib['time'] = '%s' % time + for case in cases: + new_root.extend(case) + new_tree = ET.ElementTree(new_root) + ET.dump(new_tree) + + +def usage(): + this_file = os.path.basename(__file__) + print 'Usage: %s results1.xml results2.xml' % this_file + + +if __name__ == '__main__': + main()