python: Fix count of selected tests on terminal collection summary.

If there were errors or skipped modules on collection,
pytest would mistakenly subtract those from the selected count.
This commit is contained in:
Eduardo Schettino 2022-02-07 14:31:44 +08:00
parent 18c0cfc0de
commit 61d15a600e
4 changed files with 33 additions and 3 deletions

View File

@ -0,0 +1,3 @@
Fix count of selected tests on terminal collection summary.
If there were errors or skipped modules on collection, pytest would mistakenly subtract those from the selected count.

View File

@ -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)

View File

@ -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 *",

View File

@ -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:
testpath = 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(
"""