Modify documentation to use `.stash` when storing test results. (#10535)
This commit is contained in:
		
							parent
							
								
									857e34ef85
								
							
						
					
					
						commit
						f513d33d5a
					
				|  | @ -895,6 +895,8 @@ here is a little example implemented via a local plugin: | ||||||
| 
 | 
 | ||||||
|     import pytest |     import pytest | ||||||
| 
 | 
 | ||||||
|  |     phase_report_key = StashKey[Dict[str, CollectReport]]() | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     @pytest.hookimpl(tryfirst=True, hookwrapper=True) |     @pytest.hookimpl(tryfirst=True, hookwrapper=True) | ||||||
|     def pytest_runtest_makereport(item, call): |     def pytest_runtest_makereport(item, call): | ||||||
|  | @ -902,10 +904,9 @@ here is a little example implemented via a local plugin: | ||||||
|         outcome = yield |         outcome = yield | ||||||
|         rep = outcome.get_result() |         rep = outcome.get_result() | ||||||
| 
 | 
 | ||||||
|         # set a report attribute for each phase of a call, which can |         # store test results for each phase of a call, which can | ||||||
|         # be "setup", "call", "teardown" |         # be "setup", "call", "teardown" | ||||||
| 
 |         item.stash.setdefault(phase_report_key, {})[rep.when] = rep | ||||||
|         setattr(item, "rep_" + rep.when, rep) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     @pytest.fixture |     @pytest.fixture | ||||||
|  | @ -913,11 +914,11 @@ here is a little example implemented via a local plugin: | ||||||
|         yield |         yield | ||||||
|         # request.node is an "item" because we use the default |         # request.node is an "item" because we use the default | ||||||
|         # "function" scope |         # "function" scope | ||||||
|         if request.node.rep_setup.failed: |         report = request.node.stash[phase_report_key] | ||||||
|             print("setting up a test failed!", request.node.nodeid) |         if report["setup"].failed: | ||||||
|         elif request.node.rep_setup.passed: |             print("setting up a test failed or skipped", request.node.nodeid) | ||||||
|             if request.node.rep_call.failed: |         elif ("call" not in report) or report["call"].failed: | ||||||
|                 print("executing test failed", request.node.nodeid) |             print("executing test failed or skipped", request.node.nodeid) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if you then have failing tests: | if you then have failing tests: | ||||||
|  |  | ||||||
|  | @ -12,6 +12,7 @@ from typing import TYPE_CHECKING | ||||||
| from typing import Union | from typing import Union | ||||||
| 
 | 
 | ||||||
| from _pytest.nodes import Item | from _pytest.nodes import Item | ||||||
|  | from _pytest.reports import CollectReport | ||||||
| from _pytest.stash import StashKey | from _pytest.stash import StashKey | ||||||
| 
 | 
 | ||||||
| if TYPE_CHECKING: | if TYPE_CHECKING: | ||||||
|  | @ -318,9 +319,7 @@ def pytest_sessionfinish(session, exitstatus: Union[int, ExitCode]): | ||||||
| @hookimpl(tryfirst=True, hookwrapper=True) | @hookimpl(tryfirst=True, hookwrapper=True) | ||||||
| def pytest_runtest_makereport(item: Item, call): | def pytest_runtest_makereport(item: Item, call): | ||||||
|     outcome = yield |     outcome = yield | ||||||
|     result = outcome.get_result() |     result: CollectReport = outcome.get_result() | ||||||
| 
 | 
 | ||||||
|     if tmppath_result_key not in item.stash: |     empty: Dict[str, bool] = {} | ||||||
|         item.stash[tmppath_result_key] = {result.when: result.passed} |     item.stash.setdefault(tmppath_result_key, empty)[result.when] = result.passed | ||||||
|     else: |  | ||||||
|         item.stash[tmppath_result_key][result.when] = result.passed |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue