Report teardown output on test failure
Until now, teardown stdout/stderr output was not reported upon test failure. However such output is sometime necessary to understand the failure. fix #442
This commit is contained in:
		
							parent
							
								
									35d154f580
								
							
						
					
					
						commit
						6f93ffb5d4
					
				
							
								
								
									
										1
									
								
								AUTHORS
								
								
								
								
							
							
						
						
									
										1
									
								
								AUTHORS
								
								
								
								
							|  | @ -90,6 +90,7 @@ Markus Unterwaditzer | |||
| Martijn Faassen | ||||
| Martin K. Scherer | ||||
| Martin Prusse | ||||
| Mathieu Clabaut | ||||
| Matt Bachmann | ||||
| Matt Williams | ||||
| Matthias Hafner | ||||
|  |  | |||
|  | @ -17,7 +17,8 @@ | |||
|   or implicitly as a plugin (`#2005`_). | ||||
|   Thanks `@RonnyPfannschmidt`_ for the report and `@nicoddemus`_ for the PR. | ||||
| 
 | ||||
| * | ||||
| * Report teardown output on test failure (`#442`_). | ||||
|   Thanks `@matclab`_ or the PR. | ||||
| 
 | ||||
| * | ||||
| 
 | ||||
|  | @ -26,7 +27,9 @@ | |||
| 
 | ||||
| .. _@cwitty: https://github.com/cwitty | ||||
| .. _@okulynyak: https://github.com/okulynyak | ||||
| .. _@matclab: https://github.com/matclab | ||||
| 
 | ||||
| .. _#442: https://github.com/pytest-dev/pytest/issues/442 | ||||
| .. _#1976: https://github.com/pytest-dev/pytest/issues/1976 | ||||
| .. _#1998: https://github.com/pytest-dev/pytest/issues/1998 | ||||
| .. _#2004: https://github.com/pytest-dev/pytest/issues/2004 | ||||
|  |  | |||
|  | @ -458,6 +458,15 @@ class TerminalReporter: | |||
|                     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') | ||||
|  | @ -473,6 +482,9 @@ class TerminalReporter: | |||
|                     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": | ||||
|  |  | |||
|  | @ -370,6 +370,31 @@ class TestFixtureReporting: | |||
|             "*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(""" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue