Add support for the new pytest_runtest_logfinish hook (pytest 3.4)

This commit is contained in:
Bruno Oliveira
2018-01-10 17:52:27 -02:00
parent 4dc86a1dad
commit 449e6c2e00
4 changed files with 32 additions and 1 deletions

View File

@@ -375,6 +375,25 @@ class TestTerminalReporting:
"*1 passed, 1 warnings*",
])
def test_logfinish_hook(self, testdir):
"""Ensure the pytest_runtest_logfinish hook is being properly handled"""
from _pytest import hookspec
if not hasattr(hookspec, 'pytest_runtest_logfinish'):
pytest.skip('test requires pytest_runtest_logfinish hook in pytest (3.4+)')
testdir.makeconftest("""
def pytest_runtest_logfinish():
print('pytest_runtest_logfinish hook called')
""")
testdir.makepyfile("""
def test_func():
pass
""")
result = testdir.runpytest("-n1", "-s")
result.stdout.fnmatch_lines([
"*pytest_runtest_logfinish hook called*",
])
def test_teardownfails_one_function(testdir):
p = testdir.makepyfile("""

View File

@@ -235,6 +235,11 @@ class DSession:
self.config.hook.pytest_runtest_logstart(
nodeid=nodeid, location=location)
def slave_logfinish(self, node, nodeid, location):
"""Emitted when a node calls the pytest_runtest_logfinish hook."""
self.config.hook.pytest_runtest_logfinish(
nodeid=nodeid, location=location)
def slave_testreport(self, node, rep):
"""Emitted when a node calls the pytest_runtest_logreport hook."""
rep.node = node

View File

@@ -9,6 +9,8 @@
import sys
import os
import time
import _pytest.hookspec
import pytest
@@ -93,6 +95,11 @@ class SlaveInteractor:
def pytest_runtest_logstart(self, nodeid, location):
self.sendevent("logstart", nodeid=nodeid, location=location)
# the pytest_runtest_logfinish hook was introduced in pytest 3.4
if hasattr(_pytest.hookspec, 'pytest_runtest_logfinish'):
def pytest_runtest_logfinish(self, nodeid, location):
self.sendevent("logfinish", nodeid=nodeid, location=location)
def pytest_runtest_logreport(self, report):
data = serialize_report(report)
data["item_index"] = self.item_index

View File

@@ -304,7 +304,7 @@ class SlaveController(object):
self._down = True
self.slaveoutput = kwargs['slaveoutput']
self.notify_inproc("slavefinished", node=self)
elif eventname == "logstart":
elif eventname in ("logstart", "logfinish"):
self.notify_inproc(eventname, node=self, **kwargs)
elif eventname in (
"testreport", "collectreport", "teardownreport"):