Skip to content

Commit 435eaf4

Browse files
committed
regrtest: nicer output for durations
Use milliseconds and minutes units, not only seconds.
1 parent f745700 commit 435eaf4

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

Lib/test/libregrtest/main.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@
3434
TEMPDIR = os.path.abspath(TEMPDIR)
3535

3636

37+
def format_duration(seconds):
38+
if seconds < 1.0:
39+
return '%.0f ms' % (seconds * 1e3)
40+
if seconds < 60.0:
41+
return '%.0f sec' % seconds
42+
43+
minutes, seconds = divmod(seconds, 60.0)
44+
return '%.0f min %.0f sec' % (minutes, seconds)
45+
46+
3747
class Regrtest:
3848
"""Execute a test suite.
3949
@@ -107,27 +117,21 @@ def accumulate_result(self, test, result):
107117
self.skipped.append(test)
108118
self.resource_denieds.append(test)
109119

110-
def time_delta(self, ceil=False):
111-
seconds = time.monotonic() - self.start_time
112-
if ceil:
113-
seconds = math.ceil(seconds)
114-
else:
115-
seconds = int(seconds)
116-
return datetime.timedelta(seconds=seconds)
117-
118120
def display_progress(self, test_index, test):
119121
if self.ns.quiet:
120122
return
121123
if self.bad and not self.ns.pgo:
122124
fmt = "{time} [{test_index:{count_width}}{test_count}/{nbad}] {test_name}"
123125
else:
124126
fmt = "{time} [{test_index:{count_width}}{test_count}] {test_name}"
127+
test_time = time.monotonic() - self.start_time
128+
test_time = datetime.timedelta(seconds=int(test_time))
125129
line = fmt.format(count_width=self.test_count_width,
126130
test_index=test_index,
127131
test_count=self.test_count,
128132
nbad=len(self.bad),
129133
test_name=test,
130-
time=self.time_delta())
134+
time=test_time)
131135
print(line, flush=True)
132136

133137
def parse_args(self, kwargs):
@@ -286,9 +290,10 @@ def display_result(self):
286290

287291
if self.ns.print_slow:
288292
self.test_times.sort(reverse=True)
293+
print()
289294
print("10 slowest tests:")
290295
for time, test in self.test_times[:10]:
291-
print("%s: %.1fs" % (test, time))
296+
print("- %s: %s" % (test, format_duration(time)))
292297

293298
if self.bad:
294299
print(count(len(self.bad), "test"), "failed:")
@@ -342,7 +347,7 @@ def run_tests_sequential(self):
342347
previous_test = format_test_result(test, result[0])
343348
test_time = time.monotonic() - start_time
344349
if test_time >= PROGRESS_MIN_TIME:
345-
previous_test = "%s in %.0f sec" % (previous_test, test_time)
350+
previous_test = "%s in %s" % (previous_test, format_duration(test_time))
346351
elif result[0] == PASSED:
347352
# be quiet: say nothing if the test passed shortly
348353
previous_test = None
@@ -418,7 +423,9 @@ def finalize(self):
418423
r.write_results(show_missing=True, summary=True,
419424
coverdir=self.ns.coverdir)
420425

421-
print("Total duration: %s" % self.time_delta(ceil=True))
426+
print()
427+
duration = time.monotonic() - self.start_time
428+
print("Total duration: %s" % format_duration(duration))
422429

423430
if self.ns.runleaks:
424431
os.system("leaks %d" % os.getpid())

Lib/test/test_regrtest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -660,13 +660,13 @@ def test_interrupted(self):
660660
output = self.run_tests(test, exitcode=1)
661661
self.check_executed_tests(output, test, omitted=test)
662662

663-
def test_slow(self):
663+
def test_slowest(self):
664664
# test --slowest
665665
tests = [self.create_test() for index in range(3)]
666666
output = self.run_tests("--slowest", *tests)
667667
self.check_executed_tests(output, tests)
668668
regex = ('10 slowest tests:\n'
669-
'(?:%s: [0-9]+\.[0-9]+s\n){%s}'
669+
'(?:- %s: .*\n){%s}'
670670
% (self.TESTNAME_REGEX, len(tests)))
671671
self.check_line(output, regex)
672672

0 commit comments

Comments
 (0)