Transfer warnings from workers to master

Fix #92
This commit is contained in:
Bruno Oliveira
2017-08-09 07:32:14 -03:00
parent 02754d84d3
commit d0474076e9
5 changed files with 25 additions and 0 deletions

1
changelog/92.feature Normal file
View File

@@ -0,0 +1 @@
Warnings are now properly transferred from workers to the master node.

View File

@@ -339,6 +339,18 @@ class TestTerminalReporting:
"E assert 0",
])
@pytest.mark.parametrize('n', ['-n0', '-n1'])
def test_logwarning(self, testdir, n):
testdir.makepyfile("""
import warnings
def test_func():
warnings.warn('this is a warning')
""")
result = testdir.runpytest(n)
result.stdout.fnmatch_lines([
"*this is a warning*",
])
def test_teardownfails_one_function(testdir):
p = testdir.makepyfile("""

View File

@@ -247,6 +247,11 @@ class DSession:
if rep.failed:
self._failed_slave_collectreport(node, rep)
def slave_logwarning(self, message, code, nodeid, fslocation):
"""Emitted when a node calls the pytest_logwarning hook."""
kwargs = dict(message=message, code=code, nodeid=nodeid, fslocation=fslocation)
self.config.hook.pytest_logwarning.call_historic(kwargs=kwargs)
def _clone_node(self, node):
"""Return new node based on an existing one.

View File

@@ -96,6 +96,9 @@ class SlaveInteractor:
data = serialize_report(report)
self.sendevent("collectreport", data=data)
def pytest_logwarning(self, message, code, nodeid, fslocation):
self.sendevent("logwarning", message=message, code=code, nodeid=nodeid, fslocation=fslocation)
def serialize_report(rep):
def disassembled_report(rep):

View File

@@ -315,6 +315,10 @@ class SlaveController(object):
self.notify_inproc(eventname, node=self, rep=rep)
elif eventname == "collectionfinish":
self.notify_inproc(eventname, node=self, ids=kwargs['ids'])
elif eventname == "logwarning":
self.notify_inproc(eventname, message=kwargs['message'],
code=kwargs['code'], nodeid=kwargs['nodeid'],
fslocation=kwargs['nodeid'])
else:
raise ValueError("unknown event: %s" % (eventname,))
except KeyboardInterrupt: