Skip to content

Commit

Permalink
Report teardown output on test failure
Browse files Browse the repository at this point in the history
Until now, teardown stdout/stderr output was not reported upon test failure.
However such output is sometime necessary to understand the failure.

fix pytest-dev#442
  • Loading branch information
Mathieu Clabaut committed Oct 30, 2016
1 parent 35d154f commit 2512797
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
12 changes: 12 additions & 0 deletions _pytest/terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,15 @@ def summary_passes(self):
self.write_sep("_", msg)
self._outrep_summary(rep)

def print_teardown_sections(self, rep):
for secname, content in rep.sections:
if 'teardown' in secname:
self._tw.sep('-', secname)
if content[-1:] == "\n":
content = content[:-1]
self._tw.line(content)


def summary_failures(self):
if self.config.option.tbstyle != "no":
reports = self.getreports('failed')
Expand All @@ -473,6 +482,9 @@ def summary_failures(self):
markup = {'red': True, 'bold': True}
self.write_sep("_", msg, **markup)
self._outrep_summary(rep)
for report in self.getreports(''):
if report.nodeid == rep.nodeid and report.when == 'teardown':
self.print_teardown_sections(report)

def summary_errors(self):
if self.config.option.tbstyle != "no":
Expand Down
25 changes: 25 additions & 0 deletions testing/test_terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,31 @@ def teardown_function(function):
"*1 failed*1 error*",
])

def test_setup_teardown_output_and_test_failure(self, testdir):
""" Test for issue #442 """
testdir.makepyfile("""
def setup_function(function):
print ("setup func")
def test_fail():
assert 0, "failingfunc"
def teardown_function(function):
print ("teardown func")
""")
result = testdir.runpytest()
result.stdout.fnmatch_lines([
"*test_fail*",
"*def test_fail():",
"*failingfunc*",
"*Captured stdout setup*",
"*setup func*",
"*Captured stdout teardown*",
"*teardown func*",

"*1 failed*",
])

class TestTerminalFunctional:
def test_deselected(self, testdir):
testpath = testdir.makepyfile("""
Expand Down

0 comments on commit 2512797

Please sign in to comment.