Merge pull request #215 from nicoddemus/logwarning-py-path

Fix crash when transferring internal pytest warnings from workers to the master node
This commit is contained in:
Ronny Pfannschmidt
2017-08-10 08:57:21 +02:00
committed by GitHub
3 changed files with 17 additions and 6 deletions

1
changelog/214.bugfix Normal file
View File

@@ -0,0 +1 @@
Fix crash when transferring internal pytest warnings from workers to the master node.

View File

@@ -340,18 +340,28 @@ class TestTerminalReporting:
]) ])
@pytest.mark.parametrize('n', ['-n0', '-n1']) @pytest.mark.parametrize('n', ['-n0', '-n1'])
def test_logwarning(self, testdir, n): @pytest.mark.parametrize('warn_type', ['pytest', 'builtin'])
def test_logwarning(self, testdir, n, warn_type):
from pkg_resources import parse_version from pkg_resources import parse_version
if parse_version(pytest.__version__) < parse_version('3.1'): if parse_version(pytest.__version__) < parse_version('3.1'):
pytest.skip('pytest warnings requires >= 3.1') pytest.skip('pytest warnings requires >= 3.1')
if warn_type == 'builtin':
warn_code = """warnings.warn(UserWarning('this is a warning'))"""
elif warn_type == 'pytest':
warn_code = """request.config.warn('', 'this is a warning',
fslocation=py.path.local())"""
else:
assert False
testdir.makepyfile(""" testdir.makepyfile("""
import warnings import warnings, py
def test_func(): def test_func(request):
warnings.warn('this is a warning') {warn_code}
""") """.format(warn_code=warn_code))
result = testdir.runpytest(n) result = testdir.runpytest(n)
result.stdout.fnmatch_lines([ result.stdout.fnmatch_lines([
"*this is a warning*", "*this is a warning*",
"*1 passed, 1 warnings*",
]) ])

View File

@@ -99,7 +99,7 @@ class SlaveInteractor:
def pytest_logwarning(self, message, code, nodeid, fslocation): def pytest_logwarning(self, message, code, nodeid, fslocation):
self.sendevent("logwarning", message=message, code=code, nodeid=nodeid, self.sendevent("logwarning", message=message, code=code, nodeid=nodeid,
fslocation=fslocation) fslocation=str(fslocation))
def serialize_report(rep): def serialize_report(rep):