test_ok2/testing/test_setuponly.py

295 lines
7.2 KiB
Python
Raw Normal View History

2016-06-22 22:45:36 +08:00
import pytest
from _pytest.main import ExitCode
2016-06-22 22:45:36 +08:00
2018-05-23 22:48:46 +08:00
@pytest.fixture(params=["--setup-only", "--setup-plan", "--setup-show"], scope="module")
2016-06-22 22:45:36 +08:00
def mode(request):
return request.param
def test_show_only_active_fixtures(testdir, mode, dummy_yaml_custom_test):
testdir.makepyfile(
2018-05-23 22:48:46 +08:00
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture
def _arg0():
"""hidden arg0 fixture"""
@pytest.fixture
def arg1():
"""arg1 docstring"""
def test_arg1(arg1):
pass
2018-05-23 22:48:46 +08:00
'''
)
2016-06-22 18:00:45 +08:00
result = testdir.runpytest(mode)
2016-06-22 18:00:45 +08:00
assert result.ret == 0
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(
["*SETUP F arg1*", "*test_arg1 (fixtures used: arg1)*", "*TEARDOWN F arg1*"]
)
result.stdout.no_fnmatch_line("*_arg0*")
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
def test_show_different_scopes(testdir, mode):
2018-05-23 22:48:46 +08:00
p = testdir.makepyfile(
'''
2016-06-22 18:00:45 +08:00
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
2018-05-23 22:48:46 +08:00
'''
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
result = testdir.runpytest(mode, p)
2016-06-22 18:00:45 +08:00
assert result.ret == 0
2018-05-23 22:48:46 +08:00
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*",
]
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
def test_show_nested_fixtures(testdir, mode):
2018-05-23 22:48:46 +08:00
testdir.makeconftest(
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture(scope='session')
def arg_same():
"""session scoped fixture"""
2018-05-23 22:48:46 +08:00
'''
)
p = testdir.makepyfile(
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture(scope='function')
def arg_same(arg_same):
"""function scoped fixture"""
def test_arg1(arg_same):
pass
2018-05-23 22:48:46 +08:00
'''
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
result = testdir.runpytest(mode, p)
2016-06-22 18:00:45 +08:00
assert result.ret == 0
2018-05-23 22:48:46 +08:00
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*",
]
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
def test_show_fixtures_with_autouse(testdir, mode):
2018-05-23 22:48:46 +08:00
p = testdir.makepyfile(
'''
2016-06-22 18:00:45 +08:00
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
2018-05-23 22:48:46 +08:00
'''
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
result = testdir.runpytest(mode, p)
2016-06-22 18:00:45 +08:00
assert result.ret == 0
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(
[
"SETUP S arg_session*",
"*SETUP F arg_function*",
"*test_arg1 (fixtures used: arg_function, arg_session)*",
]
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
def test_show_fixtures_with_parameters(testdir, mode):
2018-05-23 22:48:46 +08:00
testdir.makeconftest(
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture(scope='session', params=['foo', 'bar'])
def arg_same():
"""session scoped fixture"""
2018-05-23 22:48:46 +08:00
'''
)
p = testdir.makepyfile(
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture(scope='function')
def arg_other(arg_same):
"""function scoped fixture"""
def test_arg1(arg_other):
pass
2018-05-23 22:48:46 +08:00
'''
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
result = testdir.runpytest(mode, p)
2016-06-22 18:00:45 +08:00
assert result.ret == 0
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(
[
"SETUP S arg_same?foo?",
"TEARDOWN S arg_same?foo?",
"SETUP S arg_same?bar?",
"TEARDOWN S arg_same?bar?",
]
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
def test_show_fixtures_with_parameter_ids(testdir, mode):
2018-05-23 22:48:46 +08:00
testdir.makeconftest(
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture(
scope='session', params=['foo', 'bar'], ids=['spam', 'ham'])
def arg_same():
"""session scoped fixture"""
2018-05-23 22:48:46 +08:00
'''
)
p = testdir.makepyfile(
'''
2016-06-22 18:00:45 +08:00
import pytest
@pytest.fixture(scope='function')
def arg_other(arg_same):
"""function scoped fixture"""
def test_arg1(arg_other):
pass
2018-05-23 22:48:46 +08:00
'''
)
2016-06-22 18:00:45 +08:00
2016-06-22 22:45:36 +08:00
result = testdir.runpytest(mode, p)
2016-06-22 18:00:45 +08:00
assert result.ret == 0
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(
["SETUP S arg_same?spam?", "SETUP S arg_same?ham?"]
)
def test_show_fixtures_with_parameter_ids_function(testdir, mode):
2018-05-23 22:48:46 +08:00
p = testdir.makepyfile(
"""
import pytest
@pytest.fixture(params=['foo', 'bar'], ids=lambda p: p.upper())
def foobar():
pass
def test_foobar(foobar):
pass
2018-05-23 22:48:46 +08:00
"""
)
result = testdir.runpytest(mode, p)
assert result.ret == 0
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(["*SETUP F foobar?FOO?", "*SETUP F foobar?BAR?"])
def test_dynamic_fixture_request(testdir):
2018-05-23 22:48:46 +08:00
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
2018-05-23 22:48:46 +08:00
"""
)
2018-05-23 22:48:46 +08:00
result = testdir.runpytest("--setup-only", p)
assert result.ret == 0
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(
[
"*SETUP F dynamically_requested_fixture",
"*TEARDOWN F dynamically_requested_fixture",
]
)
def test_capturing(testdir):
2018-05-23 22:48:46 +08:00
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
2018-05-23 22:48:46 +08:00
"""
)
2018-05-23 22:48:46 +08:00
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. """
2018-05-23 22:48:46 +08:00
p = testdir.makepyfile(
"""
import pytest
@pytest.fixture
def arg():
assert True
def test_arg(arg):
assert False
2018-05-23 22:48:46 +08:00
"""
)
result = testdir.runpytest("--setup-show", p)
assert result.ret == 1
2018-05-23 22:48:46 +08:00
result.stdout.fnmatch_lines(
["*SETUP F arg*", "*test_arg (fixtures used: arg)F*", "*TEARDOWN F arg*"]
)
def test_setup_show_with_KeyboardInterrupt_in_test(testdir):
p = testdir.makepyfile(
"""
import pytest
@pytest.fixture
def arg():
pass
def test_arg(arg):
raise KeyboardInterrupt()
"""
)
result = testdir.runpytest("--setup-show", p, no_reraise_ctrlc=True)
result.stdout.fnmatch_lines(
[
"*SETUP F arg*",
"*test_arg (fixtures used: arg)*",
"*TEARDOWN F arg*",
"*! KeyboardInterrupt !*",
"*= no tests ran in *",
]
)
assert result.ret == ExitCode.INTERRUPTED