diff --git a/CHANGELOG b/CHANGELOG index 149f57c..dd01df6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +XXX +------------------------- + +- fix pytest/xdist issue485 (also depends on py-1.4.21.dev1): + attach stdout/stderr on --boxed processes that die. + 1.10 ------------------------- diff --git a/setup.py b/setup.py index f6c0abe..2aaa7cd 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name="pytest-xdist", - version='1.10', + version='1.11.dev1', description='py.test xdist plugin for distributed testing and loop-on-failing modes', long_description=open('README.txt').read(), license='MIT', diff --git a/testing/test_boxed.py b/testing/test_boxed.py index 4b522f4..5b867fd 100644 --- a/testing/test_boxed.py +++ b/testing/test_boxed.py @@ -1,6 +1,10 @@ -import py +import pytest +import os -@py.test.mark.skipif("not hasattr(os, 'fork')") +needsfork = pytest.mark.skipif(not hasattr(os, "fork"), + reason="os.fork required") + +@needsfork def test_functional_boxed(testdir): p1 = testdir.makepyfile(""" import os @@ -13,12 +17,32 @@ def test_functional_boxed(testdir): "*1 failed*" ]) +@needsfork +def test_functional_boxed_stdout(testdir): + p1 = testdir.makepyfile(""" + import os + import sys + def test_function(): + sys.stdout.write("hello\\n") + sys.stderr.write("world\\n") + os.kill(os.getpid(), 15) + """) + result = testdir.runpytest(p1, "--boxed") + result.stdout.fnmatch_lines(""" + *CRASHED* + *stdout* + hello + *stderr* + world + *1 failed* + """) + class TestOptionEffects: def test_boxed_option_default(self, testdir): tmpdir = testdir.tmpdir.ensure("subdir", dir=1) config = testdir.parseconfig() assert not config.option.boxed - py.test.importorskip("execnet") + pytest.importorskip("execnet") config = testdir.parseconfig('-d', tmpdir) assert not config.option.boxed diff --git a/xdist/__init__.py b/xdist/__init__.py index d0a4df4..5f40d56 100644 --- a/xdist/__init__.py +++ b/xdist/__init__.py @@ -1,2 +1,2 @@ # -__version__ = '1.10' +__version__ = '1.11.dev1' diff --git a/xdist/plugin.py b/xdist/plugin.py index 1c9a891..b91f83d 100644 --- a/xdist/plugin.py +++ b/xdist/plugin.py @@ -118,10 +118,14 @@ def forked_run_report(item): def report_process_crash(item, result): path, lineno = item._getfslineno() - info = "%s:%s: running the test CRASHED with signal %d" %( - path, lineno, result.signal) + info = ("%s:%s: running the test CRASHED with signal %d" % + (path, lineno, result.signal)) from _pytest import runner call = runner.CallInfo(lambda: 0/0, "???") call.excinfo = info rep = runner.pytest_runtest_makereport(item, call) + if result.out: + rep.sections.append(("captured stdout", result.out)) + if result.err: + rep.sections.append(("captured stderr", result.err)) return rep