def workload_fixture_generator(command):
@pytest.yield_fixture
def workload(admin_node):
pids = set()
def _make_workload():
pid = admin_node.check_call('{} & echo $!'.format(
command)).stdout_str
# check process is running
cmd = 'ls /proc/{}'.format(pid)
err_msg = "Background process with pid `{}` is not found".format(
pid)
assert admin_node.execute(cmd).exit_code == 0, err_msg
pids.add(pid)
yield _make_workload
for pid in pids:
admin_node.execute('kill {}'.format(pid))
return workload
python类yield_fixture()的实例源码
def mock_input():
"""
A fixture that mocks python's print function during test.
"""
if sys.version_info < (3, 0):
input_mod = '__builtin__.raw_input'
else:
input_mod = 'builtins.input'
with mock.patch(input_mod) as mock_obj:
yield mock_obj
# @pytest.yield_fixture(scope='function', autouse=True)
# def around_all_tests():
# """
# Executes before and after EVERY test.
# Can be helpful for tracking bugs impacting test bed.
# """
# # before
# yield
# # after
def test_params_and_ids_yieldfixture(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.yield_fixture(params=[object(), object()],
ids=['alpha', 'beta'])
def fix(request):
yield request.param
def test_foo(fix):
assert 1
""")
res = testdir.runpytest('-v')
res.stdout.fnmatch_lines([
'*test_foo*alpha*',
'*test_foo*beta*'])
def test_simple(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.yield_fixture
def arg1():
print ("setup")
yield 1
print ("teardown")
def test_1(arg1):
print ("test1 %s" % arg1)
def test_2(arg1):
print ("test2 %s" % arg1)
assert 0
""")
result = testdir.runpytest("-s")
result.stdout.fnmatch_lines("""
*setup*
*test1 1*
*teardown*
*setup*
*test2 1*
*teardown*
""")
def test_scoped(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.yield_fixture(scope="module")
def arg1():
print ("setup")
yield 1
print ("teardown")
def test_1(arg1):
print ("test1 %s" % arg1)
def test_2(arg1):
print ("test2 %s" % arg1)
""")
result = testdir.runpytest("-s")
result.stdout.fnmatch_lines("""
*setup*
*test1 1*
*test2 1*
*teardown*
""")
def describe_do_run():
@pytest.yield_fixture
def config(tmpdir):
cwd = os.getcwd()
tmpdir.chdir()
with Path(".env").open('w') as f:
f.write("FOO=1")
with Path("app.py").open('w') as f:
f.write("os.getenv('FOO', 2)")
yield Config.new(
sourcefiles=[
SourceFile(".env"),
SourceFile("app.py"),
],
environments=[
Environment("test", command="echo FOO=3"),
],
)
os.chdir(cwd)
def it_returns_table_data(runner, config):
print(config.sourcefiles)
data = do_run(config)
expect(list(data)) == [
['Variable', 'File: .env', 'File: app.py', 'Environment: test'],
['FOO', 'FOO=1', "os.getenv('FOO', 2)", '3'],
]
def models(db):
from tests.base.modules.model import ModelModule
return ModelModule()
# @pytest.yield_fixture(scope='session', autouse=True)
# def mocks():
# _mocks = [DatetimeMock()]
# for mock in _mocks:
# mock.start()
# yield
# for mock in _mocks:
# mock.stop()
def test_setup_exception(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.yield_fixture(scope="module")
def arg1():
pytest.fail("setup")
yield 1
def test_1(arg1):
pass
""")
result = testdir.runpytest("-s")
result.stdout.fnmatch_lines("""
*pytest.fail*setup*
*1 error*
""")
def test_teardown_exception(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.yield_fixture(scope="module")
def arg1():
yield 1
pytest.fail("teardown")
def test_1(arg1):
pass
""")
result = testdir.runpytest("-s")
result.stdout.fnmatch_lines("""
*pytest.fail*teardown*
*1 passed*1 error*
""")
def test_no_yield(self, testdir):
testdir.makepyfile("""
import pytest
@pytest.yield_fixture(scope="module")
def arg1():
return 1
def test_1(arg1):
pass
""")
result = testdir.runpytest("-s")
result.stdout.fnmatch_lines("""
*yield_fixture*requires*yield*
*yield_fixture*
*def arg1*
""")
def test_doctest_module_session_fixture(self, testdir):
"""Test that session fixtures are initialized for doctest modules (#768)
"""
# session fixture which changes some global data, which will
# be accessed by doctests in a module
testdir.makeconftest("""
import pytest
import sys
@pytest.yield_fixture(autouse=True, scope='session')
def myfixture():
assert not hasattr(sys, 'pytest_session_data')
sys.pytest_session_data = 1
yield
del sys.pytest_session_data
""")
testdir.makepyfile(foo="""
import sys
def foo():
'''
>>> assert sys.pytest_session_data == 1
'''
def bar():
'''
>>> assert sys.pytest_session_data == 1
'''
""")
result = testdir.runpytest("--doctest-modules")
result.stdout.fnmatch_lines('*2 passed*')