]> granicus.if.org Git - python/commitdiff
regrtest: display test duration in sequential mode
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 23 Mar 2016 11:14:10 +0000 (12:14 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 23 Mar 2016 11:14:10 +0000 (12:14 +0100)
Only display duration if a test takes more than 30 seconds.

Lib/test/libregrtest/main.py
Lib/test/libregrtest/runtest.py
Lib/test/libregrtest/runtest_mp.py
Lib/test/test_regrtest.py

index 1c99f2b09e094584b715623f505432a1d2e58d3a..b954db5c9d68ef6365f1595b1c4f685b903f786c 100644 (file)
@@ -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:
index 043f23c095164244eb0b515ccc5d9ff1bb4c76ef..daff4766c27a7bb1a152838c12e8cdd5becc60f7 100644 (file)
@@ -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)
index 5e847a096c4088a523c96dced8f855ebdbc431cc..e51b10015f34265956059c90e3548e3f96567648 100644 (file)
@@ -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
 
index 18d0f46715804af4bc259b1c6ac333aa794beb15..03e7e1d8a1b0a55cfb69f735f9afb5e2e24d2df8 100644 (file)
@@ -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)