diff --git a/changelog/214.bugfix b/changelog/214.bugfix new file mode 100644 index 00000000..8a5d7586 --- /dev/null +++ b/changelog/214.bugfix @@ -0,0 +1 @@ +Fix crash when transferring internal pytest warnings from workers to the master node. diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index bc71b8ce..b1d3428f 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -340,18 +340,28 @@ def test_func(): ]) @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 if parse_version(pytest.__version__) < parse_version('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(""" - import warnings - def test_func(): - warnings.warn('this is a warning') - """) + import warnings, py + def test_func(request): + {warn_code} + """.format(warn_code=warn_code)) result = testdir.runpytest(n) result.stdout.fnmatch_lines([ "*this is a warning*", + "*1 passed, 1 warnings*", ]) diff --git a/xdist/remote.py b/xdist/remote.py index f9760602..791da787 100644 --- a/xdist/remote.py +++ b/xdist/remote.py @@ -99,7 +99,7 @@ def pytest_collectreport(self, report): def pytest_logwarning(self, message, code, nodeid, fslocation): self.sendevent("logwarning", message=message, code=code, nodeid=nodeid, - fslocation=fslocation) + fslocation=str(fslocation)) def serialize_report(rep):