73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
| import pytest
 | |
| import sys
 | |
| 
 | |
| 
 | |
| def pytest_addoption(parser):
 | |
|     group = parser.getgroup("debugconfig")
 | |
|     group.addoption('--setuponly', '--setup-only', action="store_true",
 | |
|                     help="only setup fixtures, do not execute tests.")
 | |
|     group.addoption('--setupshow', '--setup-show', action="store_true",
 | |
|                     help="show setup of fixtures while executing tests.")
 | |
| 
 | |
| 
 | |
| @pytest.hookimpl(hookwrapper=True)
 | |
| def pytest_fixture_setup(fixturedef, request):
 | |
|     yield
 | |
|     config = request.config
 | |
|     if config.option.setupshow:
 | |
|         if hasattr(request, 'param'):
 | |
|             # Save the fixture parameter so ._show_fixture_action() can
 | |
|             # display it now and during the teardown (in .finish()).
 | |
|             if fixturedef.ids:
 | |
|                 if callable(fixturedef.ids):
 | |
|                     fixturedef.cached_param = fixturedef.ids(request.param)
 | |
|                 else:
 | |
|                     fixturedef.cached_param = fixturedef.ids[
 | |
|                         request.param_index]
 | |
|             else:
 | |
|                 fixturedef.cached_param = request.param
 | |
|         _show_fixture_action(fixturedef, 'SETUP')
 | |
| 
 | |
| 
 | |
| def pytest_fixture_post_finalizer(fixturedef):
 | |
|     if hasattr(fixturedef, "cached_result"):
 | |
|         config = fixturedef._fixturemanager.config
 | |
|         if config.option.setupshow:
 | |
|             _show_fixture_action(fixturedef, 'TEARDOWN')
 | |
|             if hasattr(fixturedef, "cached_param"):
 | |
|                 del fixturedef.cached_param
 | |
| 
 | |
| 
 | |
| def _show_fixture_action(fixturedef, msg):
 | |
|     config = fixturedef._fixturemanager.config
 | |
|     capman = config.pluginmanager.getplugin('capturemanager')
 | |
|     if capman:
 | |
|         out, err = capman.suspendcapture()
 | |
| 
 | |
|     tw = config.get_terminal_writer()
 | |
|     tw.line()
 | |
|     tw.write(' ' * 2 * fixturedef.scopenum)
 | |
|     tw.write('{step} {scope} {fixture}'.format(
 | |
|         step=msg.ljust(8),  # align the output to TEARDOWN
 | |
|         scope=fixturedef.scope[0].upper(),
 | |
|         fixture=fixturedef.argname))
 | |
| 
 | |
|     if msg == 'SETUP':
 | |
|         deps = sorted(arg for arg in fixturedef.argnames if arg != 'request')
 | |
|         if deps:
 | |
|             tw.write(' (fixtures used: {0})'.format(', '.join(deps)))
 | |
| 
 | |
|     if hasattr(fixturedef, 'cached_param'):
 | |
|         tw.write('[{0}]'.format(fixturedef.cached_param))
 | |
| 
 | |
|     if capman:
 | |
|         capman.resumecapture()
 | |
|         sys.stdout.write(out)
 | |
|         sys.stderr.write(err)
 | |
| 
 | |
| 
 | |
| @pytest.hookimpl(tryfirst=True)
 | |
| def pytest_cmdline_main(config):
 | |
|     if config.option.setuponly:
 | |
|         config.option.setupshow = True
 |