update ISSUES some more, introduce duration to RunResult and a failing dist-testing termination test.

--HG--
branch : trunk
This commit is contained in:
holger krekel 2009-12-30 11:37:46 +01:00
parent a15afb5e48
commit f02b84d528
3 changed files with 48 additions and 23 deletions

View File

@ -1,16 +1,16 @@
introduce py.test.mark.nocollect introduce py.test.mark.nocollect
------------------------------------------------------- -------------------------------------------------------
tags: feature tags: feature 1.2
for not considering a function for test collection at all. for not considering a function for test collection at all.
maybe also introduce a py.test.mark.test to explicitely maybe also introduce a py.test.mark.test to explicitely
mark a function to become a tested one. Lookup mark a function to become a tested one. Lookup JUnit
ways of tagging tests.
have imported module mismatch honour relative paths have imported module mismatch honour relative paths
-------------------------------------------------------- --------------------------------------------------------
tags: bug tags: bug 1.2
With 1.1.1 py.test fails at least on windows if an import With 1.1.1 py.test fails at least on windows if an import
is relative and compared against an absolute conftest.py is relative and compared against an absolute conftest.py
@ -18,7 +18,7 @@ path. Normalize.
allow plugins/conftests to show extra header information allow plugins/conftests to show extra header information
-------------------------------------------------------- --------------------------------------------------------
tags: feature tags: feature 1.2
The test-report header should optionally show information The test-report header should optionally show information
about the under-test package and versions/locations of about the under-test package and versions/locations of
@ -26,7 +26,7 @@ involved packages.
make node._checkcollectable more robust make node._checkcollectable more robust
------------------------------------------------- -------------------------------------------------
tags: bug 1.1.2 tags: bug 1.2
currently node._checkcollectable() can raise currently node._checkcollectable() can raise
exceptions for all kinds of reasons ('conftest.py' loading exceptions for all kinds of reasons ('conftest.py' loading
@ -36,35 +36,41 @@ a good error message.
call termination with small timeout call termination with small timeout
------------------------------------------------- -------------------------------------------------
tags: feature 1.1.2 tags: feature 1.2
test: testing/pytest/dist/test_dsession.py - test_terminate_on_hanging_node
Call gateway group termination with a small timeout if available. Call gateway group termination with a small timeout if available.
Should make dist-testing less likely to leave lost processes. Should make dist-testing less likely to leave lost processes.
make capfd skip if 'dup' is not available
-------------------------------------------------------
tags: feature 1.1.2
currently, using 'capfd' as a funcarg will fail because
it cannot call os.dup on setup. Should cause a skip.
introduce multi-install, i.e. py.test3, py.test-pypy, py.test-jython
and maybe a commandline-"suffix" override?
fix dist-testing: execnet needs to be rsynced over automatically fix dist-testing: execnet needs to be rsynced over automatically
------------------------------------------------------------------ ------------------------------------------------------------------
tags: bug 1.1.2 tags: bug 1.2
bb: http://bitbucket.org/hpk42/py-trunk/issue/65/ bb: http://bitbucket.org/hpk42/py-trunk/issue/65/
execnet is not rsynced so fails if run in an ssh-situation. execnet is not rsynced so fails if run in an ssh-situation.
write test and fix. write test and fix.
dist-testing: fix session hook / setup calling
-----------------------------------------------------
tags: bug 1.2
Currently pytest_sessionstart and finish are called
on the master node and not on the slaves. Call
it on slaves and provide a session.nodeid which defaults
to None for the master and contains the gateway id
for slaves.
have --report=xfailed[-detail] report the actual tracebacks
------------------------------------------------------------------
tags: feature
there is no way to induce py.test to display the full tracebacks
of the expected failure. Introduce one.
relax requirement to have tests/testing contain an __init__ relax requirement to have tests/testing contain an __init__
---------------------------------------------------------------- ----------------------------------------------------------------
tags: feature 1.1.2 tags: feature 1.2
bb: http://bitbucket.org/hpk42/py-trunk/issue/64 bb: http://bitbucket.org/hpk42/py-trunk/issue/64
A local test run of a "tests" directory may work A local test run of a "tests" directory may work
@ -74,7 +80,7 @@ an error or make it work without the __init__.py
deprecate ensuretemp / introduce funcargs to setup method deprecate ensuretemp / introduce funcargs to setup method
-------------------------------------------------------------- --------------------------------------------------------------
tags: wish 1.1.2 tags: experimental-wish 1.2
The remaining uses of py.test.ensuretemp within the py-test base The remaining uses of py.test.ensuretemp within the py-test base
itself are for setup methods. Also users have expressed the itself are for setup methods. Also users have expressed the

View File

@ -6,6 +6,7 @@ import py
import sys, os import sys, os
import re import re
import inspect import inspect
import time
from py.impl.test.config import Config as pytestConfig from py.impl.test.config import Config as pytestConfig
from py.plugin import hookspec from py.plugin import hookspec
from py.builtin import print_ from py.builtin import print_
@ -24,12 +25,14 @@ def pytest_funcarg__testdir(request):
rex_outcome = re.compile("(\d+) (\w+)") rex_outcome = re.compile("(\d+) (\w+)")
class RunResult: class RunResult:
def __init__(self, ret, outlines, errlines): def __init__(self, ret, outlines, errlines, duration):
self.ret = ret self.ret = ret
self.outlines = outlines self.outlines = outlines
self.errlines = errlines self.errlines = errlines
self.stdout = LineMatcher(outlines) self.stdout = LineMatcher(outlines)
self.stderr = LineMatcher(errlines) self.stderr = LineMatcher(errlines)
self.duration = duration
def parseoutcomes(self): def parseoutcomes(self):
for line in reversed(self.outlines): for line in reversed(self.outlines):
if 'seconds' in line: if 'seconds' in line:
@ -284,6 +287,7 @@ class TmpTestdir:
print_("running", cmdargs, "curdir=", py.path.local()) print_("running", cmdargs, "curdir=", py.path.local())
f1 = p1.open("w") f1 = p1.open("w")
f2 = p2.open("w") f2 = p2.open("w")
now = time.time()
popen = self.popen(cmdargs, stdout=f1, stderr=f2, popen = self.popen(cmdargs, stdout=f1, stderr=f2,
close_fds=(sys.platform != "win32")) close_fds=(sys.platform != "win32"))
ret = popen.wait() ret = popen.wait()
@ -296,7 +300,7 @@ class TmpTestdir:
if out: if out:
for line in out: for line in out:
py.builtin.print_(line, file=sys.stdout) py.builtin.print_(line, file=sys.stdout)
return RunResult(ret, out, err) return RunResult(ret, out, err, time.time()-now)
def runpybin(self, scriptname, *args): def runpybin(self, scriptname, *args):
fullargs = self._getpybinargs(scriptname) + args fullargs = self._getpybinargs(scriptname) + args

View File

@ -440,4 +440,19 @@ def test_teardownfails_one_function(testdir):
"*1 passed*1 error*" "*1 passed*1 error*"
]) ])
@py.test.mark.xfail
def test_terminate_on_hangingnode(testdir):
p = testdir.makeconftest("""
def pytest__teardown_final(session):
if session.nodeid: # running on slave
import time
time.sleep(2)
""")
result = testdir.runpytest(p, '--dist=each', '--tx=popen')
assert result.duration < 2.0
result.stdout.fnmatch_lines([
"*0 passed*",
])