270 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| import pytest
 | |
| 
 | |
| 
 | |
| @pytest.fixture(params=["--setup-only", "--setup-plan", "--setup-show"], scope="module")
 | |
| def mode(request):
 | |
|     return request.param
 | |
| 
 | |
| 
 | |
| def test_show_only_active_fixtures(testdir, mode):
 | |
|     p = testdir.makepyfile(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture
 | |
|         def _arg0():
 | |
|             """hidden arg0 fixture"""
 | |
|         @pytest.fixture
 | |
|         def arg1():
 | |
|             """arg1 docstring"""
 | |
|         def test_arg1(arg1):
 | |
|             pass
 | |
|     '''
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         ["*SETUP    F arg1*", "*test_arg1 (fixtures used: arg1)*", "*TEARDOWN F arg1*"]
 | |
|     )
 | |
|     assert "_arg0" not in result.stdout.str()
 | |
| 
 | |
| 
 | |
| def test_show_different_scopes(testdir, mode):
 | |
|     p = testdir.makepyfile(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture
 | |
|         def arg_function():
 | |
|             """function scoped fixture"""
 | |
|         @pytest.fixture(scope='session')
 | |
|         def arg_session():
 | |
|             """session scoped fixture"""
 | |
|         def test_arg1(arg_session, arg_function):
 | |
|             pass
 | |
|     '''
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         [
 | |
|             "SETUP    S arg_session*",
 | |
|             "*SETUP    F arg_function*",
 | |
|             "*test_arg1 (fixtures used: arg_function, arg_session)*",
 | |
|             "*TEARDOWN F arg_function*",
 | |
|             "TEARDOWN S arg_session*",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_show_nested_fixtures(testdir, mode):
 | |
|     testdir.makeconftest(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture(scope='session')
 | |
|         def arg_same():
 | |
|             """session scoped fixture"""
 | |
|         '''
 | |
|     )
 | |
|     p = testdir.makepyfile(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture(scope='function')
 | |
|         def arg_same(arg_same):
 | |
|             """function scoped fixture"""
 | |
|         def test_arg1(arg_same):
 | |
|             pass
 | |
|     '''
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         [
 | |
|             "SETUP    S arg_same*",
 | |
|             "*SETUP    F arg_same (fixtures used: arg_same)*",
 | |
|             "*test_arg1 (fixtures used: arg_same)*",
 | |
|             "*TEARDOWN F arg_same*",
 | |
|             "TEARDOWN S arg_same*",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_show_fixtures_with_autouse(testdir, mode):
 | |
|     p = testdir.makepyfile(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture
 | |
|         def arg_function():
 | |
|             """function scoped fixture"""
 | |
|         @pytest.fixture(scope='session', autouse=True)
 | |
|         def arg_session():
 | |
|             """session scoped fixture"""
 | |
|         def test_arg1(arg_function):
 | |
|             pass
 | |
|     '''
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         [
 | |
|             "SETUP    S arg_session*",
 | |
|             "*SETUP    F arg_function*",
 | |
|             "*test_arg1 (fixtures used: arg_function, arg_session)*",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_show_fixtures_with_parameters(testdir, mode):
 | |
|     testdir.makeconftest(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture(scope='session', params=['foo', 'bar'])
 | |
|         def arg_same():
 | |
|             """session scoped fixture"""
 | |
|         '''
 | |
|     )
 | |
|     p = testdir.makepyfile(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture(scope='function')
 | |
|         def arg_other(arg_same):
 | |
|             """function scoped fixture"""
 | |
|         def test_arg1(arg_other):
 | |
|             pass
 | |
|     '''
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         [
 | |
|             "SETUP    S arg_same?foo?",
 | |
|             "TEARDOWN S arg_same?foo?",
 | |
|             "SETUP    S arg_same?bar?",
 | |
|             "TEARDOWN S arg_same?bar?",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_show_fixtures_with_parameter_ids(testdir, mode):
 | |
|     testdir.makeconftest(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture(
 | |
|             scope='session', params=['foo', 'bar'], ids=['spam', 'ham'])
 | |
|         def arg_same():
 | |
|             """session scoped fixture"""
 | |
|         '''
 | |
|     )
 | |
|     p = testdir.makepyfile(
 | |
|         '''
 | |
|         import pytest
 | |
|         @pytest.fixture(scope='function')
 | |
|         def arg_other(arg_same):
 | |
|             """function scoped fixture"""
 | |
|         def test_arg1(arg_other):
 | |
|             pass
 | |
|     '''
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         ["SETUP    S arg_same?spam?", "SETUP    S arg_same?ham?"]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_show_fixtures_with_parameter_ids_function(testdir, mode):
 | |
|     p = testdir.makepyfile(
 | |
|         """
 | |
|         import pytest
 | |
|         @pytest.fixture(params=['foo', 'bar'], ids=lambda p: p.upper())
 | |
|         def foobar():
 | |
|             pass
 | |
|         def test_foobar(foobar):
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest(mode, p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(["*SETUP    F foobar?FOO?", "*SETUP    F foobar?BAR?"])
 | |
| 
 | |
| 
 | |
| def test_dynamic_fixture_request(testdir):
 | |
|     p = testdir.makepyfile(
 | |
|         """
 | |
|         import pytest
 | |
|         @pytest.fixture()
 | |
|         def dynamically_requested_fixture():
 | |
|             pass
 | |
|         @pytest.fixture()
 | |
|         def dependent_fixture(request):
 | |
|             request.getfixturevalue('dynamically_requested_fixture')
 | |
|         def test_dyn(dependent_fixture):
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest("--setup-only", p)
 | |
|     assert result.ret == 0
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         [
 | |
|             "*SETUP    F dynamically_requested_fixture",
 | |
|             "*TEARDOWN F dynamically_requested_fixture",
 | |
|         ]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_capturing(testdir):
 | |
|     p = testdir.makepyfile(
 | |
|         """
 | |
|         import pytest, sys
 | |
|         @pytest.fixture()
 | |
|         def one():
 | |
|             sys.stdout.write('this should be captured')
 | |
|             sys.stderr.write('this should also be captured')
 | |
|         @pytest.fixture()
 | |
|         def two(one):
 | |
|             assert 0
 | |
|         def test_capturing(two):
 | |
|             pass
 | |
|     """
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest("--setup-only", p)
 | |
|     result.stdout.fnmatch_lines(
 | |
|         ["this should be captured", "this should also be captured"]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_show_fixtures_and_execute_test(testdir):
 | |
|     """ Verifies that setups are shown and tests are executed. """
 | |
|     p = testdir.makepyfile(
 | |
|         """
 | |
|         import pytest
 | |
|         @pytest.fixture
 | |
|         def arg():
 | |
|             assert True
 | |
|         def test_arg(arg):
 | |
|             assert False
 | |
|     """
 | |
|     )
 | |
| 
 | |
|     result = testdir.runpytest("--setup-show", p)
 | |
|     assert result.ret == 1
 | |
| 
 | |
|     result.stdout.fnmatch_lines(
 | |
|         ["*SETUP    F arg*", "*test_arg (fixtures used: arg)F*", "*TEARDOWN F arg*"]
 | |
|     )
 |