Skip to content

Commit 7e5c1b6

Browse files
committed
Fix -vv overriding --durations-min (#12938)
1 parent e8c2082 commit 7e5c1b6

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

AUTHORS

+1
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ Joseph Hunkeler
225225
Joseph Sawaya
226226
Josh Karpel
227227
Joshua Bronson
228+
Julian Valentin
228229
Jurko Gospodnetić
229230
Justice Ndou
230231
Justyna Janczyszyn

changelog/12938.bugfix.rst

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed ``--durations-min`` argument not respected if ``-vv`` is used.

src/_pytest/runner.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def pytest_addoption(parser: Parser) -> None:
6161
"--durations-min",
6262
action="store",
6363
type=float,
64-
default=0.005,
64+
default=None,
6565
metavar="N",
6666
help="Minimal duration in seconds for inclusion in slowest list. "
6767
"Default: 0.005.",
@@ -74,6 +74,8 @@ def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None:
7474
verbose = terminalreporter.config.get_verbosity()
7575
if durations is None:
7676
return
77+
if durations_min is None:
78+
durations_min = 0.005 if verbose < 2 else 0.0
7779
tr = terminalreporter
7880
dlist = []
7981
for replist in tr.stats.values():
@@ -90,10 +92,16 @@ def pytest_terminal_summary(terminalreporter: TerminalReporter) -> None:
9092
dlist = dlist[:durations]
9193

9294
for i, rep in enumerate(dlist):
93-
if verbose < 2 and rep.duration < durations_min:
95+
if rep.duration < durations_min:
9496
tr.write_line("")
9597
tr.write_line(
96-
f"({len(dlist) - i} durations < {durations_min:g}s hidden. Use -vv to show these durations.)"
98+
f"({len(dlist) - i} durations < {durations_min:g}s hidden."
99+
+ (
100+
" Use -vv to show these durations."
101+
if terminalreporter.config.option.durations_min is None
102+
else ""
103+
)
104+
+ ")"
97105
)
98106
break
99107
tr.write_line(f"{rep.duration:02.2f}s {rep.when:<8} {rep.nodeid}")

testing/acceptance_test.py

+28-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# mypy: allow-untyped-defs
22
from __future__ import annotations
33

4+
from collections.abc import Sequence
45
import dataclasses
56
import importlib.metadata
67
import os
@@ -970,28 +971,39 @@ def test_calls_showall(self, pytester: Pytester, mock_timing) -> None:
970971
pytester.makepyfile(self.source)
971972
result = pytester.runpytest_inprocess("--durations=0")
972973
assert result.ret == 0
973-
974-
tested = "3"
975-
for x in tested:
976-
for y in ("call",): # 'setup', 'call', 'teardown':
977-
for line in result.stdout.lines:
978-
if (f"test_{x}") in line and y in line:
979-
break
980-
else:
981-
raise AssertionError(f"not found {x} {y}")
974+
print(result.stdout)
975+
TestDurations.check_tests_in_output(result.stdout.lines, "23")
982976

983977
def test_calls_showall_verbose(self, pytester: Pytester, mock_timing) -> None:
984978
pytester.makepyfile(self.source)
985979
result = pytester.runpytest_inprocess("--durations=0", "-vv")
986980
assert result.ret == 0
981+
TestDurations.check_tests_in_output(result.stdout.lines, "123")
987982

988-
for x in "123":
989-
for y in ("call",): # 'setup', 'call', 'teardown':
990-
for line in result.stdout.lines:
991-
if (f"test_{x}") in line and y in line:
992-
break
993-
else:
994-
raise AssertionError(f"not found {x} {y}")
983+
def test_calls_showall_durationsmin(self, pytester: Pytester, mock_timing) -> None:
984+
pytester.makepyfile(self.source)
985+
result = pytester.runpytest_inprocess("--durations=0", "--durations-min=0.015")
986+
assert result.ret == 0
987+
TestDurations.check_tests_in_output(result.stdout.lines, "3")
988+
989+
def test_calls_showall_durationsmin_verbose(
990+
self, pytester: Pytester, mock_timing
991+
) -> None:
992+
pytester.makepyfile(self.source)
993+
result = pytester.runpytest_inprocess(
994+
"--durations=0", "--durations-min=0.015", "-vv"
995+
)
996+
assert result.ret == 0
997+
TestDurations.check_tests_in_output(result.stdout.lines, "3")
998+
999+
@staticmethod
1000+
def check_tests_in_output(lines: Sequence[str], expected_test_numbers: str) -> None:
1001+
found_test_numbers = "".join(
1002+
test_number
1003+
for test_number in "123"
1004+
if any(f"test_{test_number}" in line and " call " in line for line in lines)
1005+
)
1006+
assert found_test_numbers == expected_test_numbers
9951007

9961008
def test_with_deselected(self, pytester: Pytester, mock_timing) -> None:
9971009
pytester.makepyfile(self.source)

0 commit comments

Comments
 (0)