mirror of
https://github.com/python/cpython.git
synced 2025-11-11 22:55:08 +00:00
regrtest: display test duration in sequential mode
Only display duration if a test takes more than 30 seconds.
This commit is contained in:
parent
e985726553
commit
69649f21f0
4 changed files with 29 additions and 9 deletions
|
|
@ -13,7 +13,8 @@ from test.libregrtest.cmdline import _parse_args
|
||||||
from test.libregrtest.runtest import (
|
from test.libregrtest.runtest import (
|
||||||
findtests, runtest,
|
findtests, runtest,
|
||||||
STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED,
|
STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED,
|
||||||
INTERRUPTED, CHILD_ERROR)
|
INTERRUPTED, CHILD_ERROR,
|
||||||
|
PROGRESS_MIN_TIME)
|
||||||
from test.libregrtest.setup import setup_tests
|
from test.libregrtest.setup import setup_tests
|
||||||
from test import support
|
from test import support
|
||||||
try:
|
try:
|
||||||
|
|
@ -293,8 +294,15 @@ class Regrtest:
|
||||||
|
|
||||||
save_modules = sys.modules.keys()
|
save_modules = sys.modules.keys()
|
||||||
|
|
||||||
|
previous_test = None
|
||||||
for test_index, test in enumerate(self.tests, 1):
|
for test_index, test in enumerate(self.tests, 1):
|
||||||
self.display_progress(test_index, test)
|
start_time = time.monotonic()
|
||||||
|
|
||||||
|
text = test
|
||||||
|
if previous_test:
|
||||||
|
text = '%s -- %s' % (text, previous_test)
|
||||||
|
self.display_progress(test_index, text)
|
||||||
|
|
||||||
if self.tracer:
|
if self.tracer:
|
||||||
# If we're tracing code coverage, then we don't exit with status
|
# If we're tracing code coverage, then we don't exit with status
|
||||||
# if on a false return value from main.
|
# if on a false return value from main.
|
||||||
|
|
@ -311,6 +319,12 @@ class Regrtest:
|
||||||
else:
|
else:
|
||||||
self.accumulate_result(test, result)
|
self.accumulate_result(test, result)
|
||||||
|
|
||||||
|
test_time = time.monotonic() - start_time
|
||||||
|
if test_time >= PROGRESS_MIN_TIME:
|
||||||
|
previous_test = '%s took %.0f sec' % (test, test_time)
|
||||||
|
else:
|
||||||
|
previous_test = None
|
||||||
|
|
||||||
if self.ns.findleaks:
|
if self.ns.findleaks:
|
||||||
gc.collect()
|
gc.collect()
|
||||||
if gc.garbage:
|
if gc.garbage:
|
||||||
|
|
@ -326,6 +340,9 @@ class Regrtest:
|
||||||
if module not in save_modules and module.startswith("test."):
|
if module not in save_modules and module.startswith("test."):
|
||||||
support.unload(module)
|
support.unload(module)
|
||||||
|
|
||||||
|
if previous_test:
|
||||||
|
print(previous_test)
|
||||||
|
|
||||||
def _test_forever(self, tests):
|
def _test_forever(self, tests):
|
||||||
while True:
|
while True:
|
||||||
for test in tests:
|
for test in tests:
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@ RESOURCE_DENIED = -3
|
||||||
INTERRUPTED = -4
|
INTERRUPTED = -4
|
||||||
CHILD_ERROR = -5 # error in a child process
|
CHILD_ERROR = -5 # error in a child process
|
||||||
|
|
||||||
|
# Minimum duration of a test to display its duration or to mention that
|
||||||
|
# the test is running in background
|
||||||
|
PROGRESS_MIN_TIME = 30.0 # seconds
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# small set of tests to determine if we have a basically functioning interpreter
|
# small set of tests to determine if we have a basically functioning interpreter
|
||||||
# (i.e. if any of these fail, then anything else is likely to follow)
|
# (i.e. if any of these fail, then anything else is likely to follow)
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,11 @@ except ImportError:
|
||||||
print("Multiprocess option requires thread support")
|
print("Multiprocess option requires thread support")
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
from test.libregrtest.runtest import runtest, INTERRUPTED, CHILD_ERROR
|
from test.libregrtest.runtest import (
|
||||||
|
runtest, INTERRUPTED, CHILD_ERROR, PROGRESS_MIN_TIME)
|
||||||
from test.libregrtest.setup import setup_tests
|
from test.libregrtest.setup import setup_tests
|
||||||
|
|
||||||
|
|
||||||
# Minimum duration of a test to display its duration or to mention that
|
|
||||||
# the test is running in background
|
|
||||||
PROGRESS_MIN_TIME = 30.0 # seconds
|
|
||||||
|
|
||||||
# Display the running tests if nothing happened last N seconds
|
# Display the running tests if nothing happened last N seconds
|
||||||
PROGRESS_UPDATE = 30.0 # seconds
|
PROGRESS_UPDATE = 30.0 # seconds
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -304,7 +304,7 @@ class ParseArgsTestCase(unittest.TestCase):
|
||||||
class BaseTestCase(unittest.TestCase):
|
class BaseTestCase(unittest.TestCase):
|
||||||
TEST_UNIQUE_ID = 1
|
TEST_UNIQUE_ID = 1
|
||||||
TESTNAME_PREFIX = 'test_regrtest_'
|
TESTNAME_PREFIX = 'test_regrtest_'
|
||||||
TESTNAME_REGEX = r'test_[a-z0-9_]+'
|
TESTNAME_REGEX = r'test_[a-zA-Z0-9_]+'
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.testdir = os.path.realpath(os.path.dirname(__file__))
|
self.testdir = os.path.realpath(os.path.dirname(__file__))
|
||||||
|
|
@ -351,7 +351,8 @@ class BaseTestCase(unittest.TestCase):
|
||||||
self.assertRegex(output, regex)
|
self.assertRegex(output, regex)
|
||||||
|
|
||||||
def parse_executed_tests(self, output):
|
def parse_executed_tests(self, output):
|
||||||
regex = r'^[0-9]+:[0-9]+:[0-9]+ \[ *[0-9]+(?:/ *[0-9]+)?\] (%s)$' % self.TESTNAME_REGEX
|
regex = (r'^[0-9]+:[0-9]+:[0-9]+ \[ *[0-9]+(?:/ *[0-9]+)?\] (%s)'
|
||||||
|
% self.TESTNAME_REGEX)
|
||||||
parser = re.finditer(regex, output, re.MULTILINE)
|
parser = re.finditer(regex, output, re.MULTILINE)
|
||||||
return list(match.group(1) for match in parser)
|
return list(match.group(1) for match in parser)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue