# Copyright (c) 2020, ARM Limited. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function import xml.etree.ElementTree as ET class xunit_results(): def __init__(self, name='Testsuites'): self.name = name self.suites = [] def create_suite(self, name): s = xunit_suite(name) self.suites.append(s) return s def write_results(self, filename): suites = ET.Element(self.name) tree = ET.ElementTree(suites) for s in self.suites: testsuite = ET.SubElement(suites, 'testsuite', {'name' : s.name, 'errors' : '0'}) tests = 0 failures = 0 skip = 0 for t in s.tests: test = ET.SubElement(testsuite, 'testcase', {'name' : t.name, 'classname' : t.classname, 'time' : t.time}) tests += 1 if t.skip: skip += 1 ET.SubElement(test, 'skipped', {'type' : 'Skipped test'}) if t.fail: failures += 1 fail = ET.SubElement(test, 'failure', {'type' : 'Test failed'}) fail.text = t.fail if t.sysout: sysout = ET.SubElement(test, 'system-out') sysout.text = t.sysout if t.syserr: syserr = ET.SubElement(test, 'system-err') syserr.text = t.syserr testsuite.attrib['tests'] = str(tests) testsuite.attrib['failures'] = str(failures) testsuite.attrib['skip'] = str(skip) tree.write(filename, 'UTF-8', True) class xunit_suite(): def __init__(self, name): self.name = name self.tests = [] class xunit_test(): def __init__(self, name, classname=None): self.name = name if classname: self.classname = classname else: self.classname = name self.time = '0.000' self.fail = None self.skip = False self.sysout = None self.syserr = None def failed(self, text): self.fail = text def skipped(self): self.skip = True if __name__ == '__main__': r = xunit_results() s = r.create_suite('selftest') for i in range(0,10): t = xunit_test('atest' + str(i)) if i == 3: t.failed('Unknown failure foo') if i == 7: t.skipped() s.tests.append(t) r.write_results('foo.xml')