File: generate_junit_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 (63 lines) | stat: -rw-r--r-- 2,287 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
54
55
56
57
58
59
60
61
62
63
from itertools import groupby
from xml.etree.ElementTree import Element, tostring
import sys

from generate_nunit_report import indent


def create_test_case(group_name, name, time, status, msg):
    test_case = Element('testcase', name=name, attrib={'time': time, 'classname': group_name})
    if status != "[PASSED]":
        error_type = 'failure' if status.startswith('[FAILED]') else 'error'
        failure = Element(error_type, attrib={'message': status})
        failure.text = msg
        test_case.append(failure)
    return test_case


def generate_junit_report(test_results, report_filename):
    xml_report = Element('testsuites', attrib={'name': 'indigo'})
    total_time = 0.0
    total_tests = 0
    total_errors = 0
    total_failures = 0

    for root, group in groupby(test_results, lambda x: x[0]):
        test_suite = Element('testsuite', attrib={'name': root})
        group_time = 0.0
        group_tests = 0
        group_errors = 0
        group_failures = 0

        for group_root, filename, status, msg, tspend in group:
            group_time += tspend
            group_tests += 1
            if status != '[PASSED]':
                if status.startswith('[FAILED]'):
                    group_failures += 1
                else:
                    group_errors += 1

            test_suite.append(create_test_case(group_root, filename.replace('.py', ''), str(tspend), status, msg))
        test_suite.attrib['time'] = str(group_time)
        test_suite.attrib['tests'] = str(group_tests)
        test_suite.attrib['errors'] = str(group_errors)
        test_suite.attrib['failures'] = str(group_failures)

        xml_report.append(test_suite)
        total_time += group_time
        total_tests += group_tests
        total_errors += group_errors
        total_failures += group_failures

    xml_report.attrib['time'] = str(total_time)
    xml_report.attrib['tests'] = str(total_tests)
    xml_report.attrib['errors'] = str(total_errors)
    xml_report.attrib['failures'] = str(total_failures)

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