Skip to content

Commit 30793e8

Browse files
authored
bpo-41718: Disable support.testresult XML output by default (GH-24982)
RegressionTestResult.USE_XML must now be set to True to get the JUnit XML output. Reduce the number of imports when --junit-xml=FILE option is not used: 153 => 144 (-9).
1 parent 0473fb2 commit 30793e8

2 files changed

Lines changed: 22 additions & 7 deletions

File tree

Lib/test/libregrtest/setup.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ def _test_audit_hook(name, args):
9393
support.SHORT_TIMEOUT = min(support.SHORT_TIMEOUT, ns.timeout)
9494
support.LONG_TIMEOUT = min(support.LONG_TIMEOUT, ns.timeout)
9595

96+
if ns.xmlpath:
97+
from test.support.testresult import RegressionTestResult
98+
RegressionTestResult.USE_XML = True
99+
96100

97101
def replace_stdout():
98102
"""Set stdout encoder error handler to backslashreplace (as stderr error

Lib/test/support/testresult.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,22 @@
99
import traceback
1010
import unittest
1111

12-
import xml.etree.ElementTree as ET
13-
1412
from datetime import datetime
1513

1614
class RegressionTestResult(unittest.TextTestResult):
1715
separator1 = '=' * 70 + '\n'
1816
separator2 = '-' * 70 + '\n'
17+
USE_XML = False
1918

2019
def __init__(self, stream, descriptions, verbosity):
2120
super().__init__(stream=stream, descriptions=descriptions, verbosity=0)
2221
self.buffer = True
23-
self.__suite = ET.Element('testsuite')
24-
self.__suite.set('start', datetime.utcnow().isoformat(' '))
25-
26-
self.__e = None
22+
if self.USE_XML:
23+
from xml.etree import ElementTree as ET
24+
self.__ET = ET
25+
self.__suite = ET.Element('testsuite')
26+
self.__suite.set('start', datetime.utcnow().isoformat(' '))
27+
self.__e = None
2728
self.__start_time = None
2829
self.__results = []
2930
self.__verbose = bool(verbosity)
@@ -42,17 +43,22 @@ def __getId(cls, test):
4243

4344
def startTest(self, test):
4445
super().startTest(test)
45-
self.__e = e = ET.SubElement(self.__suite, 'testcase')
46+
if self.USE_XML:
47+
self.__e = e = self.__ET.SubElement(self.__suite, 'testcase')
4648
self.__start_time = time.perf_counter()
4749
if self.__verbose:
4850
self.stream.write(f'{self.getDescription(test)} ... ')
4951
self.stream.flush()
5052

5153
def _add_result(self, test, capture=False, **args):
54+
if not self.USE_XML:
55+
return
5256
e = self.__e
5357
self.__e = None
5458
if e is None:
5559
return
60+
ET = self.__ET
61+
5662
e.set('name', args.pop('name', self.__getId(test)))
5763
e.set('status', args.pop('status', 'run'))
5864
e.set('result', args.pop('result', 'completed'))
@@ -147,6 +153,8 @@ def printErrorList(self, flavor, errors):
147153
self.stream.write('%s\n' % err)
148154

149155
def get_xml_element(self):
156+
if not self.USE_XML:
157+
raise ValueError("USE_XML is false")
150158
e = self.__suite
151159
e.set('tests', str(self.testsRun))
152160
e.set('errors', str(len(self.errors)))
@@ -174,6 +182,9 @@ def get_test_runner(stream, verbosity, capture_output=False):
174182
return get_test_runner_class(verbosity, capture_output)(stream)
175183

176184
if __name__ == '__main__':
185+
import xml.etree.ElementTree as ET
186+
RegressionTestResult.USE_XML = True
187+
177188
class TestTests(unittest.TestCase):
178189
def test_pass(self):
179190
pass

0 commit comments

Comments
 (0)