File: generate_nunit_report.py

package info (click to toggle)
indigo 1.4.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 48,936 kB
  • sloc: ansic: 332,816; cpp: 169,470; python: 20,033; java: 13,701; cs: 9,979; asm: 8,475; sql: 6,743; xml: 6,354; javascript: 1,245; sh: 555; php: 506; makefile: 54
file content (53 lines) | stat: -rw-r--r-- 1,736 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from itertools import groupby
from xml.etree.ElementTree import Element, tostring
import sys

def indent(elem, level=0):
    i = "\n" + level * "  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for elem in elem:
            indent(elem, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i


def createTestCase(name, time, status):
    testCase = Element('test-case', name=name, attrib={'time': time})
    if status != "[PASSED]":
        failure = Element('failure')
        message = Element('message')
        message.text = status
        failure.append(message)
        testCase.append(failure)
    return testCase


def generateNUnitReport(testResults, reportFilename):
    xmlReport = Element('test-results')
    mainTestSuite = Element('test-suite', name='Indigo')

    for root, group in groupby(testResults, lambda x: x[0]):
        testSuite = Element('test-suite', attrib={'name': "Indigo." + root})
        results = Element('results')

        for root, filename, status, msg, tspend in group:
            results.append(createTestCase(root + "." + filename, str(tspend), status))

        testSuite.append(results)
        mainTestSuite.append(testSuite)

    xmlReport.append(mainTestSuite)

    indent(xmlReport)
    reportOutput = tostring(xmlReport, encoding='utf-8' if sys.version_info[0] < 3 else 'unicode')
    f = open(reportFilename, 'wt')
    f.write("<?xml version='1.0' encoding='UTF-8'?>\n")
    f.write(reportOutput)
    f.close()