Fix `RunResult.parseoutcomes` (follow-up to #6353)

This commit is contained in:
Daniel Hahler 2019-12-30 17:08:52 +01:00
parent 8077168387
commit 1c0242dec1
3 changed files with 17 additions and 10 deletions

View File

@ -1 +1 @@
Fix problem with ``testdir`` not recognizing errors correctly in runs with a single test. Fix parsing of outcomes containing multiple errors with ``testdir`` results (regression in 5.3.0).

View File

@ -433,9 +433,14 @@ class RunResult:
for line in reversed(self.outlines): for line in reversed(self.outlines):
if rex_session_duration.search(line): if rex_session_duration.search(line):
outcomes = rex_outcome.findall(line) outcomes = rex_outcome.findall(line)
return {noun: int(count) for (count, noun) in outcomes} ret = {noun: int(count) for (count, noun) in outcomes}
break
else:
raise ValueError("Pytest terminal summary report not found") raise ValueError("Pytest terminal summary report not found")
if "errors" in ret:
assert "error" not in ret
ret["error"] = ret.pop("errors")
return ret
def assert_outcomes( def assert_outcomes(
self, self,
@ -456,7 +461,7 @@ class RunResult:
"passed": d.get("passed", 0), "passed": d.get("passed", 0),
"skipped": d.get("skipped", 0), "skipped": d.get("skipped", 0),
"failed": d.get("failed", 0), "failed": d.get("failed", 0),
"error": d.get("error", 0) + d.get("errors", 0), "error": d.get("error", 0),
"xpassed": d.get("xpassed", 0), "xpassed": d.get("xpassed", 0),
"xfailed": d.get("xfailed", 0), "xfailed": d.get("xfailed", 0),
} }

View File

@ -684,8 +684,9 @@ def test_run_result_repr():
) )
def test_run_pytester_with_single_test(testdir): def test_testdir_outcomes_with_multiple_errors(testdir):
testcode = """ p1 = testdir.makepyfile(
"""
import pytest import pytest
@pytest.fixture @pytest.fixture
@ -698,7 +699,8 @@ def test_run_pytester_with_single_test(testdir):
def test_error2(bad_fixture): def test_error2(bad_fixture):
pass pass
""" """
)
testdir.makepyfile(testcode) result = testdir.runpytest(str(p1))
result = testdir.runpytest()
result.assert_outcomes(error=2) result.assert_outcomes(error=2)
assert result.parseoutcomes() == {"error": 2}