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
-------------------------------------------------------
tags: feature
tags: feature 1.2
for not considering a function for test collection at all.
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
--------------------------------------------------------
tags: bug
tags: bug 1.2
With 1.1.1 py.test fails at least on windows if an import
is relative and compared against an absolute conftest.py
@ -18,7 +18,7 @@ path. Normalize.
allow plugins/conftests to show extra header information
--------------------------------------------------------
tags: feature
tags: feature 1.2
The test-report header should optionally show information
about the under-test package and versions/locations of
@ -26,7 +26,7 @@ involved packages.
make node._checkcollectable more robust
-------------------------------------------------
tags: bug 1.1.2
tags: bug 1.2
currently node._checkcollectable() can raise
exceptions for all kinds of reasons ('conftest.py' loading
@ -36,35 +36,41 @@ a good error message.
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.
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
------------------------------------------------------------------
tags: bug 1.1.2
tags: bug 1.2
bb: http://bitbucket.org/hpk42/py-trunk/issue/65/
execnet is not rsynced so fails if run in an ssh-situation.
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__
----------------------------------------------------------------
tags: feature 1.1.2
tags: feature 1.2
bb: http://bitbucket.org/hpk42/py-trunk/issue/64
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
--------------------------------------------------------------
tags: wish 1.1.2
tags: experimental-wish 1.2
The remaining uses of py.test.ensuretemp within the py-test base
itself are for setup methods. Also users have expressed the

View File

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

View File

@ -440,4 +440,19 @@ def test_teardownfails_one_function(testdir):
"*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*",
])