Merge pull request #209 from nicoddemus/warnings-support

Warnings support
This commit is contained in:
Bruno Oliveira
2017-08-09 11:05:49 -03:00
committed by GitHub
6 changed files with 36 additions and 3 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

@@ -3,3 +3,6 @@ universal = 1
[metadata]
license_file = LICENSE
[flake8]
max-line-length = 100

View File

@@ -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("""

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

@@ -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):

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: