mirror of
https://github.com/python/cpython.git
synced 2025-07-23 19:25:40 +00:00
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).
This commit is contained in:
parent
0473fb2229
commit
30793e81bd
2 changed files with 22 additions and 7 deletions
|
@ -93,6 +93,10 @@ def setup_tests(ns):
|
||||||
support.SHORT_TIMEOUT = min(support.SHORT_TIMEOUT, ns.timeout)
|
support.SHORT_TIMEOUT = min(support.SHORT_TIMEOUT, ns.timeout)
|
||||||
support.LONG_TIMEOUT = min(support.LONG_TIMEOUT, ns.timeout)
|
support.LONG_TIMEOUT = min(support.LONG_TIMEOUT, ns.timeout)
|
||||||
|
|
||||||
|
if ns.xmlpath:
|
||||||
|
from test.support.testresult import RegressionTestResult
|
||||||
|
RegressionTestResult.USE_XML = True
|
||||||
|
|
||||||
|
|
||||||
def replace_stdout():
|
def replace_stdout():
|
||||||
"""Set stdout encoder error handler to backslashreplace (as stderr error
|
"""Set stdout encoder error handler to backslashreplace (as stderr error
|
||||||
|
|
|
@ -9,21 +9,22 @@ import time
|
||||||
import traceback
|
import traceback
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
class RegressionTestResult(unittest.TextTestResult):
|
class RegressionTestResult(unittest.TextTestResult):
|
||||||
separator1 = '=' * 70 + '\n'
|
separator1 = '=' * 70 + '\n'
|
||||||
separator2 = '-' * 70 + '\n'
|
separator2 = '-' * 70 + '\n'
|
||||||
|
USE_XML = False
|
||||||
|
|
||||||
def __init__(self, stream, descriptions, verbosity):
|
def __init__(self, stream, descriptions, verbosity):
|
||||||
super().__init__(stream=stream, descriptions=descriptions, verbosity=0)
|
super().__init__(stream=stream, descriptions=descriptions, verbosity=0)
|
||||||
self.buffer = True
|
self.buffer = True
|
||||||
self.__suite = ET.Element('testsuite')
|
if self.USE_XML:
|
||||||
self.__suite.set('start', datetime.utcnow().isoformat(' '))
|
from xml.etree import ElementTree as ET
|
||||||
|
self.__ET = ET
|
||||||
self.__e = None
|
self.__suite = ET.Element('testsuite')
|
||||||
|
self.__suite.set('start', datetime.utcnow().isoformat(' '))
|
||||||
|
self.__e = None
|
||||||
self.__start_time = None
|
self.__start_time = None
|
||||||
self.__results = []
|
self.__results = []
|
||||||
self.__verbose = bool(verbosity)
|
self.__verbose = bool(verbosity)
|
||||||
|
@ -42,17 +43,22 @@ class RegressionTestResult(unittest.TextTestResult):
|
||||||
|
|
||||||
def startTest(self, test):
|
def startTest(self, test):
|
||||||
super().startTest(test)
|
super().startTest(test)
|
||||||
self.__e = e = ET.SubElement(self.__suite, 'testcase')
|
if self.USE_XML:
|
||||||
|
self.__e = e = self.__ET.SubElement(self.__suite, 'testcase')
|
||||||
self.__start_time = time.perf_counter()
|
self.__start_time = time.perf_counter()
|
||||||
if self.__verbose:
|
if self.__verbose:
|
||||||
self.stream.write(f'{self.getDescription(test)} ... ')
|
self.stream.write(f'{self.getDescription(test)} ... ')
|
||||||
self.stream.flush()
|
self.stream.flush()
|
||||||
|
|
||||||
def _add_result(self, test, capture=False, **args):
|
def _add_result(self, test, capture=False, **args):
|
||||||
|
if not self.USE_XML:
|
||||||
|
return
|
||||||
e = self.__e
|
e = self.__e
|
||||||
self.__e = None
|
self.__e = None
|
||||||
if e is None:
|
if e is None:
|
||||||
return
|
return
|
||||||
|
ET = self.__ET
|
||||||
|
|
||||||
e.set('name', args.pop('name', self.__getId(test)))
|
e.set('name', args.pop('name', self.__getId(test)))
|
||||||
e.set('status', args.pop('status', 'run'))
|
e.set('status', args.pop('status', 'run'))
|
||||||
e.set('result', args.pop('result', 'completed'))
|
e.set('result', args.pop('result', 'completed'))
|
||||||
|
@ -147,6 +153,8 @@ class RegressionTestResult(unittest.TextTestResult):
|
||||||
self.stream.write('%s\n' % err)
|
self.stream.write('%s\n' % err)
|
||||||
|
|
||||||
def get_xml_element(self):
|
def get_xml_element(self):
|
||||||
|
if not self.USE_XML:
|
||||||
|
raise ValueError("USE_XML is false")
|
||||||
e = self.__suite
|
e = self.__suite
|
||||||
e.set('tests', str(self.testsRun))
|
e.set('tests', str(self.testsRun))
|
||||||
e.set('errors', str(len(self.errors)))
|
e.set('errors', str(len(self.errors)))
|
||||||
|
@ -174,6 +182,9 @@ def get_test_runner(stream, verbosity, capture_output=False):
|
||||||
return get_test_runner_class(verbosity, capture_output)(stream)
|
return get_test_runner_class(verbosity, capture_output)(stream)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
RegressionTestResult.USE_XML = True
|
||||||
|
|
||||||
class TestTests(unittest.TestCase):
|
class TestTests(unittest.TestCase):
|
||||||
def test_pass(self):
|
def test_pass(self):
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue