Clear sys.last_* attributes before running an item
Otherwise we will keep the last failed exception around forever Related to #2798
This commit is contained in:
		
							parent
							
								
									ad0b4330e7
								
							
						
					
					
						commit
						ba407b5eb6
					
				|  | @ -105,6 +105,7 @@ def pytest_runtest_setup(item): | |||
| 
 | ||||
| def pytest_runtest_call(item): | ||||
|     _update_current_test_var(item, 'call') | ||||
|     sys.last_type, sys.last_value, sys.last_traceback = (None, None, None) | ||||
|     try: | ||||
|         item.runtest() | ||||
|     except Exception: | ||||
|  | @ -114,7 +115,7 @@ def pytest_runtest_call(item): | |||
|         sys.last_type = type | ||||
|         sys.last_value = value | ||||
|         sys.last_traceback = tb | ||||
|         del tb  # Get rid of it in this namespace | ||||
|         del type, value, tb  # Get rid of these in this frame | ||||
|         raise | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -719,18 +719,20 @@ def test_makereport_getsource_dynamic_code(testdir, monkeypatch): | |||
|     result.stdout.fnmatch_lines(["*test_fix*", "*fixture*'missing'*not found*"]) | ||||
| 
 | ||||
| 
 | ||||
| def test_store_except_info_on_eror(): | ||||
| def test_store_except_info_on_error(): | ||||
|     """ Test that upon test failure, the exception info is stored on | ||||
|     sys.last_traceback and friends. | ||||
|     """ | ||||
|     # Simulate item that raises a specific exception | ||||
|     class ItemThatRaises(object): | ||||
|     # Simulate item that might raise a specific exception, depending on `raise_error` class var | ||||
|     class ItemMightRaise(object): | ||||
|         nodeid = 'item_that_raises' | ||||
|         raise_error = True | ||||
| 
 | ||||
|         def runtest(self): | ||||
|             raise IndexError('TEST') | ||||
|             if self.raise_error: | ||||
|                 raise IndexError('TEST') | ||||
|     try: | ||||
|         runner.pytest_runtest_call(ItemThatRaises()) | ||||
|         runner.pytest_runtest_call(ItemMightRaise()) | ||||
|     except IndexError: | ||||
|         pass | ||||
|     # Check that exception info is stored on sys | ||||
|  | @ -738,6 +740,13 @@ def test_store_except_info_on_eror(): | |||
|     assert sys.last_value.args[0] == 'TEST' | ||||
|     assert sys.last_traceback | ||||
| 
 | ||||
|     # The next run should clear the exception info stored by the previous run | ||||
|     ItemMightRaise.raise_error = False | ||||
|     runner.pytest_runtest_call(ItemMightRaise()) | ||||
|     assert sys.last_type is None | ||||
|     assert sys.last_value is None | ||||
|     assert sys.last_traceback is None | ||||
| 
 | ||||
| 
 | ||||
| def test_current_test_env_var(testdir, monkeypatch): | ||||
|     pytest_current_test_vars = [] | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue