本文整理汇总了Python中pytest.hookimpl方法的典型用法代码示例。如果您正苦于以下问题:Python pytest.hookimpl方法的具体用法?Python pytest.hookimpl怎么用?Python pytest.hookimpl使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pytest
的用法示例。
在下文中一共展示了pytest.hookimpl方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_unicode_in_longrepr
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_unicode_in_longrepr(testdir) -> None:
testdir.makeconftest(
"""\
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport():
outcome = yield
rep = outcome.get_result()
if rep.when == "call":
rep.longrepr = 'ä'
"""
)
testdir.makepyfile(
"""
def test_out():
assert 0
"""
)
result = testdir.runpytest()
assert result.ret == 1
assert "UnicodeEncodeError" not in result.stderr.str()
示例2: test_collect_report_postprocessing
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_collect_report_postprocessing(self, testdir):
p = testdir.makepyfile(
"""
import not_exists
"""
)
testdir.makeconftest(
"""
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_make_collect_report():
outcome = yield
rep = outcome.get_result()
rep.headerlines += ["header1"]
outcome.force_result(rep)
"""
)
result = testdir.runpytest(p)
result.stdout.fnmatch_lines(["*ERROR collecting*", "*header1*"])
示例3: test_customized_pymakemodule_issue205_subdir
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_customized_pymakemodule_issue205_subdir(self, testdir):
b = testdir.mkdir("a").mkdir("b")
b.join("conftest.py").write(
textwrap.dedent(
"""\
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_pycollect_makemodule():
outcome = yield
mod = outcome.get_result()
mod.obj.hello = "world"
"""
)
)
b.join("test_module.py").write(
textwrap.dedent(
"""\
def test_hello():
assert hello == "world"
"""
)
)
reprec = testdir.inline_run()
reprec.assertoutcome(passed=1)
示例4: test_issue333_result_clearing
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_issue333_result_clearing(testdir):
testdir.makeconftest(
"""
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_call(item):
yield
assert 0
"""
)
testdir.makepyfile(
"""
import unittest
class TestIt(unittest.TestCase):
def test_func(self):
0/0
"""
)
reprec = testdir.inline_run()
reprec.assertoutcome(failed=1)
示例5: pytest_runtest_setup
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def pytest_runtest_setup(item # type: Function
):
"""
Replace the dictionary of function args with our facade able to handle
`lazy_value`
"""
# first let all other hooks run, they will do the setup etc.
yield
# now item.funcargs exists so we can handle it
item.funcargs = {argname: handle_lazy_args(argvalue) for argname, argvalue in item.funcargs.items()}
# @hookspec(firstresult=True)
# @pytest.hookimpl(tryfirst=True, hookwrapper=True)
示例6: test_mypy_indirect_inject
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_mypy_indirect_inject(testdir, xdist_args):
"""
Verify that uncollected files checked by mypy because of a MypyFileItem
injected in pytest_collection_modifyitems cause a failure.
"""
testdir.makepyfile(bad='''
def pyfunc(x: int) -> str:
return x * 2
''')
testdir.makepyfile(good='''
import bad
''')
testdir.makepyfile(conftest='''
import py
import pytest
@pytest.hookimpl(trylast=True) # Inject as late as possible.
def pytest_collection_modifyitems(session, config, items):
plugin = config.pluginmanager.getplugin('mypy')
items.append(
plugin.MypyFileItem(py.path.local('good.py'), session),
)
''')
testdir.mkdir('empty')
xdist_args.append('empty') # Nothing may come after xdist_args in py34.
result = testdir.runpytest_subprocess('--mypy', *xdist_args)
assert result.ret != 0
示例7: test_runtest_in_module_ordering
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_runtest_in_module_ordering(testdir) -> None:
p1 = testdir.makepyfile(
"""
import pytest
def pytest_runtest_setup(item): # runs after class-level!
item.function.mylist.append("module")
class TestClass(object):
def pytest_runtest_setup(self, item):
assert not hasattr(item.function, 'mylist')
item.function.mylist = ['class']
@pytest.fixture
def mylist(self, request):
return request.function.mylist
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_call(self, item):
try:
(yield).get_result()
except ValueError:
pass
def test_hello1(self, mylist):
assert mylist == ['class', 'module'], mylist
raise ValueError()
def test_hello2(self, mylist):
assert mylist == ['class', 'module'], mylist
def pytest_runtest_teardown(item):
del item.function.mylist
"""
)
result = testdir.runpytest(p1)
result.stdout.fnmatch_lines(["*2 passed*"])
示例8: test_select_extra_keywords
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_select_extra_keywords(self, testdir, keyword):
p = testdir.makepyfile(
test_select="""
def test_1():
pass
class TestClass(object):
def test_2(self):
pass
"""
)
testdir.makepyfile(
conftest="""
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_pycollect_makeitem(name):
outcome = yield
if name == "TestClass":
item = outcome.get_result()
item.extra_keyword_matches.add("xxx")
"""
)
reprec = testdir.inline_run(p.dirpath(), "-s", "-k", keyword)
print("keyword", repr(keyword))
passed, skipped, failed = reprec.listoutcomes()
assert len(passed) == 1
assert passed[0].nodeid.endswith("test_2")
dlist = reprec.getcalls("pytest_deselected")
assert len(dlist) == 1
assert dlist[0].items[0].name == "test_1"
示例9: test_deselected_with_hookwrapper
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_deselected_with_hookwrapper(self, testdir):
testpath = testdir.makeconftest(
"""
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_collection_modifyitems(config, items):
yield
deselected = items.pop()
config.hook.pytest_deselected(items=[deselected])
"""
)
testpath = testdir.makepyfile(
"""
def test_one():
pass
def test_two():
pass
def test_three():
pass
"""
)
result = testdir.runpytest(testpath)
result.stdout.fnmatch_lines(
[
"collected 3 items / 1 deselected / 2 selected",
"*= 2 passed, 1 deselected in*",
]
)
assert result.ret == 0
示例10: test_unknown_teststatus
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_unknown_teststatus(testdir):
"""Ensure resultlog correctly handles unknown status from pytest_report_teststatus
Inspired on pytest-rerunfailures.
"""
testdir.makepyfile(
"""
def test():
assert 0
"""
)
testdir.makeconftest(
"""
import pytest
def pytest_report_teststatus(report):
if report.outcome == 'rerun':
return "rerun", "r", "RERUN"
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport():
res = yield
report = res.get_result()
if report.when == "call":
report.outcome = 'rerun'
"""
)
result = testdir.runpytest("--resultlog=result.log")
result.stdout.fnmatch_lines(
["test_unknown_teststatus.py r *[[]100%[]]", "* 1 rerun *"]
)
lines = testdir.tmpdir.join("result.log").readlines(cr=0)
assert lines[0] == "r test_unknown_teststatus.py::test"
示例11: test_customized_pymakeitem
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_customized_pymakeitem(self, testdir):
b = testdir.mkdir("a").mkdir("b")
b.join("conftest.py").write(
textwrap.dedent(
"""\
import pytest
@pytest.hookimpl(hookwrapper=True)
def pytest_pycollect_makeitem():
outcome = yield
if outcome.excinfo is None:
result = outcome.get_result()
if result:
for func in result:
func._some123 = "world"
"""
)
)
b.join("test_module.py").write(
textwrap.dedent(
"""\
import pytest
@pytest.fixture()
def obj(request):
return request.node._some123
def test_hello(obj):
assert obj == "world"
"""
)
)
reprec = testdir.inline_run()
reprec.assertoutcome(passed=1)
示例12: interface_hook_creator
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def interface_hook_creator(package_path, common_filename, fixture_name):
def create_interface_hooks(meta_fixture, name):
tests_node_id = os.path.join(package_path, '{}.py'.format(name))
def pytest_runtest_protocol(item, nextitem):
filename, *test_name = item.nodeid.split('::')
if filename == tests_node_id and fixture_name in item.fixturenames:
fixture = _remap_fixture(item, meta_fixture.__name__, fixture_name)
for dep_fixt_name in chain.from_iterable(e.argnames for e in fixture):
_remap_fixture(item, dep_fixt_name, dep_fixt_name)
def _remap_fixture(item, actual_name, expected_name):
fixture = tuple(item.session._fixturemanager._arg2fixturedefs[actual_name])
item._request._arg2fixturedefs[expected_name] = fixture
return fixture
@pytest.hookimpl(hookwrapper=True)
def pytest_collect_file(path, parent):
outcome = yield
result = outcome.get_result()
if parent.parent is None:
result.append(
DoctestModule(os.path.join(parent.fspath, package_path, 'conftest.py'), parent,
nodeid=os.path.join(package_path, '{}_conf.py'.format(name))))
result.append(Module(os.path.join(parent.fspath, package_path, common_filename), parent,
nodeid=tests_node_id))
return pytest_runtest_protocol, pytest_collect_file
return create_interface_hooks
示例13: pytest_ignore_collect
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def pytest_ignore_collect(path, config):
"""
In python 2, equivalent of adding
--ignore-glob='**/*py35*.py'
This method works even with old pytest 2 and 3.
It was copied from recent pytest.main.pytest_ignore_collect
:param path:
:param config:
:return:
"""
if sys.version_info < (3, 5):
ignore_globs = ['**/*py35*.py']
if any(
fnmatch.fnmatch(six.text_type(path), six.text_type(glob))
for glob in ignore_globs
):
return True
# @pytest.hookimpl(trylast=True)
# def pytest_configure(config):
# """
# In python 2, add
#
# --ignore-glob='**/*py35*.py'
#
# Unfortunately this is not supported in old pytests so we do this in pytest-collect
#
# :param config:
# :return:
# """
# if sys.version_info < (3, 5):
# print("Python < 3.5: ignoring test files containing 'py35'")
# OPT = ['**/*py35*.py']
# if config.option.ignore_glob is None:
# config.option.ignore_glob = OPT
# else:
# config.option.ignore_glob += OPT
#
# assert config.getoption('--ignore-glob') == OPT
示例14: test_log_set_path
# 需要导入模块: import pytest [as 别名]
# 或者: from pytest import hookimpl [as 别名]
def test_log_set_path(testdir):
report_dir_base = testdir.tmpdir.strpath
testdir.makeini(
"""
[pytest]
log_file_level = DEBUG
log_cli=true
"""
)
testdir.makeconftest(
"""
import os
import pytest
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_setup(item):
config = item.config
logging_plugin = config.pluginmanager.get_plugin("logging-plugin")
report_file = os.path.join({}, item._request.node.name)
logging_plugin.set_log_path(report_file)
yield
""".format(
repr(report_dir_base)
)
)
testdir.makepyfile(
"""
import logging
logger = logging.getLogger("testcase-logger")
def test_first():
logger.info("message from test 1")
assert True
def test_second():
logger.debug("message from test 2")
assert True
"""
)
testdir.runpytest()
with open(os.path.join(report_dir_base, "test_first")) as rfh:
content = rfh.read()
assert "message from test 1" in content
with open(os.path.join(report_dir_base, "test_second")) as rfh:
content = rfh.read()
assert "message from test 2" in content