bpo-35513, unittest: TextTestRunner uses time.perf_counter() (GH-11180)
TextTestRunner of unittest.runner now uses time.perf_counter() rather
than time.time() to measure the execution time of a test: time.time()
can go backwards, whereas time.perf_counter() is monotonic.
Similar change made in libregrtest, pprint and random.
diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py
index 466b522..dc2abf2 100644
--- a/Lib/test/libregrtest/runtest.py
+++ b/Lib/test/libregrtest/runtest.py
@@ -162,7 +162,7 @@
abstest = get_abs_module(ns, test)
clear_caches()
with saved_test_environment(test, ns.verbose, ns.quiet, pgo=ns.pgo) as environment:
- start_time = time.time()
+ start_time = time.perf_counter()
the_module = importlib.import_module(abstest)
# If the test has a test_main, that will run the appropriate
# tests. If not, use normal unittest test loading.
@@ -180,7 +180,7 @@
refleak = dash_R(the_module, test, test_runner, ns.huntrleaks)
else:
test_runner()
- test_time = time.time() - start_time
+ test_time = time.perf_counter() - start_time
post_test_cleanup()
except support.ResourceDenied as msg:
if not ns.quiet and not ns.pgo:
diff --git a/Lib/test/time_hashlib.py b/Lib/test/time_hashlib.py
index 2585ecb..55ebac6 100644
--- a/Lib/test/time_hashlib.py
+++ b/Lib/test/time_hashlib.py
@@ -14,26 +14,26 @@
longStr = b'Z'*scale
localCF = creatorFunc
- start = time.time()
+ start = time.perf_counter()
for f in range(iterations):
x = localCF(longStr).digest()
- end = time.time()
+ end = time.perf_counter()
print(('%2.2f' % (end-start)), "seconds", iterations, "x", len(longStr), "bytes", name)
def test_create():
- start = time.time()
+ start = time.perf_counter()
for f in range(20000):
d = creatorFunc()
- end = time.time()
+ end = time.perf_counter()
print(('%2.2f' % (end-start)), "seconds", '[20000 creations]')
def test_zero():
- start = time.time()
+ start = time.perf_counter()
for f in range(20000):
x = creatorFunc().digest()
- end = time.time()
+ end = time.perf_counter()
print(('%2.2f' % (end-start)), "seconds", '[20000 "" digests]')