diff --git a/ISSUES.txt b/ISSUES.txt index 7127ac3d0..298c61e81 100644 --- a/ISSUES.txt +++ b/ISSUES.txt @@ -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 diff --git a/py/plugin/pytest_pytester.py b/py/plugin/pytest_pytester.py index f54a3e4f0..65ce274dc 100644 --- a/py/plugin/pytest_pytester.py +++ b/py/plugin/pytest_pytester.py @@ -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 diff --git a/testing/pytest/dist/test_dsession.py b/testing/pytest/dist/test_dsession.py index 11514ff46..74448ca76 100644 --- a/testing/pytest/dist/test_dsession.py +++ b/testing/pytest/dist/test_dsession.py @@ -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*", + ]) + +