Merge pull request #3102 from nicoddemus/logfinish-hook-3101
Add new pytest_runtest_logfinish hook
This commit is contained in:
commit
b0032ba2b3
|
@ -304,7 +304,25 @@ def pytest_runtest_protocol(item, nextitem):
|
||||||
|
|
||||||
|
|
||||||
def pytest_runtest_logstart(nodeid, location):
|
def pytest_runtest_logstart(nodeid, location):
|
||||||
""" signal the start of running a single test item. """
|
""" signal the start of running a single test item.
|
||||||
|
|
||||||
|
This hook will be called **before** :func:`pytest_runtest_setup`, :func:`pytest_runtest_call` and
|
||||||
|
:func:`pytest_runtest_teardown` hooks.
|
||||||
|
|
||||||
|
:param str nodeid: full id of the item
|
||||||
|
:param location: a triple of ``(filename, linenum, testname)``
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_runtest_logfinish(nodeid, location):
|
||||||
|
""" signal the complete finish of running a single test item.
|
||||||
|
|
||||||
|
This hook will be called **after** :func:`pytest_runtest_setup`, :func:`pytest_runtest_call` and
|
||||||
|
:func:`pytest_runtest_teardown` hooks.
|
||||||
|
|
||||||
|
:param str nodeid: full id of the item
|
||||||
|
:param location: a triple of ``(filename, linenum, testname)``
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
def pytest_runtest_setup(item):
|
def pytest_runtest_setup(item):
|
||||||
|
@ -445,7 +463,7 @@ def pytest_terminal_summary(terminalreporter, exitstatus):
|
||||||
def pytest_logwarning(message, code, nodeid, fslocation):
|
def pytest_logwarning(message, code, nodeid, fslocation):
|
||||||
""" process a warning specified by a message, a code string,
|
""" process a warning specified by a message, a code string,
|
||||||
a nodeid and fslocation (both of which may be None
|
a nodeid and fslocation (both of which may be None
|
||||||
if the warning is not tied to a partilar node/location)."""
|
if the warning is not tied to a particular node/location)."""
|
||||||
|
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# doctest hooks
|
# doctest hooks
|
||||||
|
|
|
@ -60,6 +60,9 @@ def pytest_runtest_protocol(item, nextitem):
|
||||||
nodeid=item.nodeid, location=item.location,
|
nodeid=item.nodeid, location=item.location,
|
||||||
)
|
)
|
||||||
runtestprotocol(item, nextitem=nextitem)
|
runtestprotocol(item, nextitem=nextitem)
|
||||||
|
item.ihook.pytest_runtest_logfinish(
|
||||||
|
nodeid=item.nodeid, location=item.location,
|
||||||
|
)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
New `pytest_runtest_logfinish <https://docs.pytest.org/en/latest/writing_plugins.html#_pytest.hookspec.pytest_runtest_logfinish>`_
|
||||||
|
hook which is called when a test item has finished executing, analogous to
|
||||||
|
`pytest_runtest_logstart <https://docs.pytest.org/en/latest/writing_plugins.html#_pytest.hookspec.pytest_runtest_start>`_.
|
|
@ -598,6 +598,8 @@ All runtest related hooks receive a :py:class:`pytest.Item <_pytest.main.Item>`
|
||||||
|
|
||||||
.. autofunction:: pytest_runtestloop
|
.. autofunction:: pytest_runtestloop
|
||||||
.. autofunction:: pytest_runtest_protocol
|
.. autofunction:: pytest_runtest_protocol
|
||||||
|
.. autofunction:: pytest_runtest_logstart
|
||||||
|
.. autofunction:: pytest_runtest_logfinish
|
||||||
.. autofunction:: pytest_runtest_setup
|
.. autofunction:: pytest_runtest_setup
|
||||||
.. autofunction:: pytest_runtest_call
|
.. autofunction:: pytest_runtest_call
|
||||||
.. autofunction:: pytest_runtest_teardown
|
.. autofunction:: pytest_runtest_teardown
|
||||||
|
|
|
@ -202,6 +202,18 @@ class BaseFunctionalTests(object):
|
||||||
""")
|
""")
|
||||||
assert rec.ret == 1
|
assert rec.ret == 1
|
||||||
|
|
||||||
|
def test_logstart_logfinish_hooks(self, testdir):
|
||||||
|
rec = testdir.inline_runsource("""
|
||||||
|
import pytest
|
||||||
|
def test_func():
|
||||||
|
pass
|
||||||
|
""")
|
||||||
|
reps = rec.getcalls("pytest_runtest_logstart pytest_runtest_logfinish")
|
||||||
|
assert [x._name for x in reps] == ['pytest_runtest_logstart', 'pytest_runtest_logfinish']
|
||||||
|
for rep in reps:
|
||||||
|
assert rep.nodeid == 'test_logstart_logfinish_hooks.py::test_func'
|
||||||
|
assert rep.location == ('test_logstart_logfinish_hooks.py', 1, 'test_func')
|
||||||
|
|
||||||
def test_exact_teardown_issue90(self, testdir):
|
def test_exact_teardown_issue90(self, testdir):
|
||||||
rec = testdir.inline_runsource("""
|
rec = testdir.inline_runsource("""
|
||||||
import pytest
|
import pytest
|
||||||
|
|
Loading…
Reference in New Issue