Merge pull request #209 from nicoddemus/warnings-support
Warnings support
This commit is contained in:
1
changelog/92.feature
Normal file
1
changelog/92.feature
Normal file
@@ -0,0 +1 @@
|
||||
Warnings are now properly transferred from workers to the master node.
|
||||
@@ -3,3 +3,6 @@ universal = 1
|
||||
|
||||
[metadata]
|
||||
license_file = LICENSE
|
||||
|
||||
[flake8]
|
||||
max-line-length = 100
|
||||
|
||||
@@ -339,6 +339,21 @@ class TestTerminalReporting:
|
||||
"E assert 0",
|
||||
])
|
||||
|
||||
@pytest.mark.parametrize('n', ['-n0', '-n1'])
|
||||
def test_logwarning(self, testdir, n):
|
||||
from pkg_resources import parse_version
|
||||
if parse_version(pytest.__version__) < parse_version('3.1'):
|
||||
pytest.skip('pytest warnings requires >= 3.1')
|
||||
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("""
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
import sys
|
||||
import os
|
||||
import pytest
|
||||
|
||||
|
||||
class SlaveInteractor:
|
||||
@@ -33,11 +34,11 @@ class SlaveInteractor:
|
||||
slaveinfo = getinfodict()
|
||||
self.sendevent("slaveready", slaveinfo=slaveinfo)
|
||||
|
||||
def pytest_sessionfinish(self, __multicall__, exitstatus):
|
||||
@pytest.hookimpl(hookwrapper=True)
|
||||
def pytest_sessionfinish(self, exitstatus):
|
||||
self.config.slaveoutput['exitstatus'] = exitstatus
|
||||
res = __multicall__.execute()
|
||||
yield
|
||||
self.sendevent("slavefinished", slaveoutput=self.config.slaveoutput)
|
||||
return res
|
||||
|
||||
def pytest_collection(self, session):
|
||||
self.sendevent("collectionstart")
|
||||
@@ -96,6 +97,10 @@ 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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user