fix pytest/xdist issue485 (also depends on py-1.4.21.dev1):

attach stdout/stderr on --boxed processes that die.
This commit is contained in:
holger krekel
2014-03-26 18:33:09 +01:00
parent 3f33a2d23e
commit 4441002e95
5 changed files with 41 additions and 7 deletions

View File

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

View File

@@ -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',

View File

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

View File

@@ -1,2 +1,2 @@
#
__version__ = '1.10'
__version__ = '1.11.dev1'

View File

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