244 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			6.3 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*',
 | 
						|
    ])
 |