mirror of
https://github.com/catchorg/Catch2.git
synced 2025-06-02 18:07:59 +00:00
Add --min-duration option
A test runner already has a --durations option to print durations. However, this isn't entirely satisfactory. When there are many tests, this produces output spam which makes it hard to find the test failure output. Nevertheless, it is helpful to be informed of tests which are unusually slow. Therefore, introduce a new option --min-duration that causes all durations above a certain threshold to be printed. This allows slow tests to be visible without mentioning every test.
This commit is contained in:
parent
36131f7ffa
commit
80b0d6975c
12 changed files with 94 additions and 4 deletions
41
tests/TestScripts/testTimeThreshold.py
Normal file
41
tests/TestScripts/testTimeThreshold.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def run_tests_with_threshold(self_test_exe, threshold):
|
||||
cmd = [self_test_exe, '--min-duration', str(threshold),
|
||||
'[min_duration_test]']
|
||||
process = subprocess.Popen(
|
||||
cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
stdout, stderr = process.communicate()
|
||||
if stderr:
|
||||
raise RuntimeError("Unexpected error output:\n" +
|
||||
stderr.decode())
|
||||
if process.returncode != 0:
|
||||
raise RuntimeError("Unexpected failure to run tests\n")
|
||||
result = stdout.split(b'\n')
|
||||
report_lines = [s.split() for s in result if b' s: ' in s]
|
||||
tests_reported = [l[2] for l in report_lines]
|
||||
times_reported = [float(l[0]) for l in report_lines]
|
||||
return tests_reported, times_reported
|
||||
|
||||
def check_times_at_least(times_reported, minimum):
|
||||
for time in times_reported:
|
||||
assert time >= minimum, (
|
||||
'Time {} was less that requested minimum {}' .format(
|
||||
time, minimum))
|
||||
|
||||
def main():
|
||||
self_test_exe, = sys.argv[1:]
|
||||
tests, times = run_tests_with_threshold(self_test_exe, '0.15')
|
||||
assert tests == [b'sleep_for_200ms'], (
|
||||
"Unexpected tests reported %s" % tests)
|
||||
check_times_at_least(times, 0.15)
|
||||
tests,times = run_tests_with_threshold(self_test_exe, '0')
|
||||
assert tests == [b'sleep_for_100ms', b'sleep_for_200ms'], (
|
||||
"Unexpected tests reported %s" % tests)
|
||||
check_times_at_least(times, 0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
Loading…
Add table
Add a link
Reference in a new issue