summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-03-23 11:14:10 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-03-23 11:14:10 (GMT)
commit69649f21f02907da59264df8faf73849d2557f5e (patch)
tree0eee9248c7fbc4673498a8e034297f996f6fb778
parente985726553b4e5571f110f00e14da5a6ae5d7994 (diff)
downloadcpython-69649f21f02907da59264df8faf73849d2557f5e.zip
cpython-69649f21f02907da59264df8faf73849d2557f5e.tar.gz
cpython-69649f21f02907da59264df8faf73849d2557f5e.tar.bz2
regrtest: display test duration in sequential mode
Only display duration if a test takes more than 30 seconds.
-rw-r--r--Lib/test/libregrtest/main.py21
-rw-r--r--Lib/test/libregrtest/runtest.py5
-rw-r--r--Lib/test/libregrtest/runtest_mp.py7
-rw-r--r--Lib/test/test_regrtest.py5
4 files changed, 29 insertions, 9 deletions
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 1c99f2b..b954db5 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -13,7 +13,8 @@ from test.libregrtest.cmdline import _parse_args
from test.libregrtest.runtest import (
findtests, runtest,
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 import support
try:
@@ -293,8 +294,15 @@ class Regrtest:
save_modules = sys.modules.keys()
+ previous_test = None
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 we're tracing code coverage, then we don't exit with status
# if on a false return value from main.
@@ -311,6 +319,12 @@ class Regrtest:
else:
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:
gc.collect()
if gc.garbage:
@@ -326,6 +340,9 @@ class Regrtest:
if module not in save_modules and module.startswith("test."):
support.unload(module)
+ if previous_test:
+ print(previous_test)
+
def _test_forever(self, tests):
while True:
for test in tests:
diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py
index 043f23c..daff476 100644
--- a/Lib/test/libregrtest/runtest.py
+++ b/Lib/test/libregrtest/runtest.py
@@ -20,6 +20,11 @@ RESOURCE_DENIED = -3
INTERRUPTED = -4
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
# (i.e. if any of these fail, then anything else is likely to follow)
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
index 5e847a0..e51b100 100644
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -13,14 +13,11 @@ except ImportError:
print("Multiprocess option requires thread support")
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
-# 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
PROGRESS_UPDATE = 30.0 # seconds
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index 18d0f46..03e7e1d 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -304,7 +304,7 @@ class ParseArgsTestCase(unittest.TestCase):
class BaseTestCase(unittest.TestCase):
TEST_UNIQUE_ID = 1
TESTNAME_PREFIX = 'test_regrtest_'
- TESTNAME_REGEX = r'test_[a-z0-9_]+'
+ TESTNAME_REGEX = r'test_[a-zA-Z0-9_]+'
def setUp(self):
self.testdir = os.path.realpath(os.path.dirname(__file__))
@@ -351,7 +351,8 @@ class BaseTestCase(unittest.TestCase):
self.assertRegex(output, regex)
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)
return list(match.group(1) for match in parser)