Skip to content

Commit

Permalink
Make min duration configurable for slowest tests
Browse files Browse the repository at this point in the history
Enables users to use custom values for the threshold used to
determine slow tests.
  • Loading branch information
ssbarnea committed Aug 22, 2020
1 parent d69abff commit c427034
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
7 changes: 4 additions & 3 deletions doc/en/usage.rst
Expand Up @@ -426,14 +426,15 @@ Pytest supports the use of ``breakpoint()`` with the following behaviours:
Profiling test execution duration
-------------------------------------

.. versionchanged:: 6.0

To get a list of the slowest 10 test durations:
To get a list of the slowest 10 test durations over 1.0s long:

.. code-block:: bash
pytest --durations=10
pytest --durations=10 --durations-min=1.0
By default, pytest will not show test durations that are too small (<0.01s) unless ``-vv`` is passed on the command-line.
By default, pytest will not show test durations that are too small (<0.005s) unless ``-vv`` is passed on the command-line.


.. _faulthandler:
Expand Down
15 changes: 12 additions & 3 deletions src/_pytest/runner.py
Expand Up @@ -52,10 +52,19 @@ def pytest_addoption(parser: Parser) -> None:
metavar="N",
help="show N slowest setup/test durations (N=0 for all).",
)
group.addoption(
"--durations-min",
action="store",
type=float,
default=0.005,
metavar="N",
help="Minimal duration in seconds for inclusion in slowest list. Default 0.005",
)


def pytest_terminal_summary(terminalreporter: "TerminalReporter") -> None:
durations = terminalreporter.config.option.durations
durations_min = terminalreporter.config.option.durations_min
verbose = terminalreporter.config.getvalue("verbose")
if durations is None:
return
Expand All @@ -76,11 +85,11 @@ def pytest_terminal_summary(terminalreporter: "TerminalReporter") -> None:
dlist = dlist[:durations]

for i, rep in enumerate(dlist):
if verbose < 2 and rep.duration < 0.005:
if verbose < 2 and rep.duration < durations_min:
tr.write_line("")
tr.write_line(
"(%s durations < 0.005s hidden. Use -vv to show these durations.)"
% (len(dlist) - i)
"(%s durations < %gs hidden. Use -vv to show these durations.)"
% (len(dlist) - i, durations_min)
)
break
tr.write_line("{:02.2f}s {:<8} {}".format(rep.duration, rep.when, rep.nodeid))
Expand Down

0 comments on commit c427034

Please sign in to comment.