Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3f113fe

Browse files
authored
Fix failed doctest status reporting (allure-framework#709)
1 parent ed3a676 commit 3f113fe

File tree

2 files changed

+55
-3
lines changed

2 files changed

+55
-3
lines changed

allure-pytest/src/listener.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pytest
2+
import doctest
23
import allure_commons
34
from allure_commons.utils import escape_non_unicode_symbols
45
from allure_commons.utils import now
@@ -185,9 +186,9 @@ def pytest_runtest_makereport(self, item, call):
185186
status_details = StatusDetails(
186187
message=message,
187188
trace=trace)
188-
if (status != Status.SKIPPED
189-
and not (call.excinfo.errisinstance(AssertionError)
190-
or call.excinfo.errisinstance(pytest.fail.Exception))):
189+
190+
exception = call.excinfo.value
191+
if (status != Status.SKIPPED and _exception_brokes_test(exception)):
191192
status = Status.BROKEN
192193

193194
if status == Status.PASSED and hasattr(report, 'wasxfail'):
@@ -305,3 +306,11 @@ def _test_fixtures(item):
305306
fixturedefs.extend(fixturedefs_pytest)
306307

307308
return fixturedefs
309+
310+
311+
def _exception_brokes_test(exception):
312+
return not isinstance(exception, (
313+
AssertionError,
314+
pytest.fail.Exception,
315+
doctest.DocTestFailure
316+
))

allure-pytest/test/integration/pytest_doctest/pytest_doctest_test.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,46 @@ def some_func():
2222
has_test_case("test_pytest_doctest.some_func",
2323
with_status("passed"))
2424
)
25+
26+
27+
@allure.feature("Integration")
28+
def test_pytest_doctest_failed(allured_testdir):
29+
allured_testdir.testdir.makepyfile('''
30+
def some_func():
31+
"""
32+
>>> some_func()
33+
True
34+
"""
35+
return not True
36+
37+
''')
38+
39+
allured_testdir.run_with_allure("--doctest-modules")
40+
41+
assert_that(
42+
allured_testdir.allure_report,
43+
has_test_case(
44+
"test_pytest_doctest_failed.some_func",
45+
with_status("failed")
46+
)
47+
)
48+
49+
50+
@allure.feature("Integration")
51+
def test_pytest_doctest_broken(allured_testdir):
52+
allured_testdir.testdir.makepyfile('''
53+
def some_func():
54+
"""
55+
>>> raise ValueError()
56+
"""
57+
''')
58+
59+
allured_testdir.run_with_allure("--doctest-modules")
60+
61+
assert_that(
62+
allured_testdir.allure_report,
63+
has_test_case(
64+
"test_pytest_doctest_broken.some_func",
65+
with_status("broken")
66+
)
67+
)

0 commit comments

Comments
 (0)