From c9cf2d44245c553258e7e0ed0e446072b3434d1b Mon Sep 17 00:00:00 2001 From: eduardo naufel schettino Date: Tue, 15 Feb 2022 19:17:34 +0800 Subject: [PATCH] Fix count of selected tests on terminal collection summary (#9628) --- changelog/9626.bugfix.rst | 3 +++ src/_pytest/terminal.py | 4 ++-- testing/test_cacheprovider.py | 2 +- testing/test_terminal.py | 27 +++++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 changelog/9626.bugfix.rst diff --git a/changelog/9626.bugfix.rst b/changelog/9626.bugfix.rst new file mode 100644 index 000000000..44d3734a1 --- /dev/null +++ b/changelog/9626.bugfix.rst @@ -0,0 +1,3 @@ +Fixed count of selected tests on terminal collection summary when there were errors or skipped modules. + +If there were errors or skipped modules on collection, pytest would mistakenly subtract those from the selected count. diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 4bcc968d1..b4848c48a 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -663,7 +663,7 @@ class TerminalReporter: errors = len(self.stats.get("error", [])) skipped = len(self.stats.get("skipped", [])) deselected = len(self.stats.get("deselected", [])) - selected = self._numcollected - errors - skipped - deselected + selected = self._numcollected - deselected line = "collected " if final else "collecting " line += ( str(self._numcollected) + " item" + ("" if self._numcollected == 1 else "s") @@ -674,7 +674,7 @@ class TerminalReporter: line += " / %d deselected" % deselected if skipped: line += " / %d skipped" % skipped - if self._numcollected > selected > 0: + if self._numcollected > selected: line += " / %d selected" % selected if self.isatty: self.rewrite(line, bold=True, erase=True) diff --git a/testing/test_cacheprovider.py b/testing/test_cacheprovider.py index cc6d547df..2baa3c8f1 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -773,7 +773,7 @@ class TestLastFailed: result = pytester.runpytest("--lf", "--lfnf", "none") result.stdout.fnmatch_lines( [ - "collected 2 items / 2 deselected", + "collected 2 items / 2 deselected / 0 selected", "run-last-failure: no previously failed tests, deselecting all items.", "deselected=2", "* 2 deselected in *", diff --git a/testing/test_terminal.py b/testing/test_terminal.py index e5f412662..f0e58e5b4 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -783,6 +783,33 @@ class TestTerminalFunctional: result.stdout.no_fnmatch_line("*= 1 deselected =*") assert result.ret == 0 + def test_selected_count_with_error(self, pytester: Pytester) -> None: + pytester.makepyfile( + test_selected_count_3=""" + def test_one(): + pass + def test_two(): + pass + def test_three(): + pass + """, + test_selected_count_error=""" + 5/0 + def test_foo(): + pass + def test_bar(): + pass + """, + ) + result = pytester.runpytest("-k", "test_t") + result.stdout.fnmatch_lines( + [ + "collected 3 items / 1 error / 1 deselected / 2 selected", + "* ERROR collecting test_selected_count_error.py *", + ] + ) + assert result.ret == ExitCode.INTERRUPTED + def test_no_skip_summary_if_failure(self, pytester: Pytester) -> None: pytester.makepyfile( """