diff --git a/CHANGELOG b/CHANGELOG index 88ac07419..cfeb5da10 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,9 @@ NEXT ----------------------------------- +- fix issue437 where assertion rewriting could cause pytest-xdist slaves + to collect different tests. + - fix issue547 capsys/capfd also work when output capturing ("-s") is disabled. - address issue170: allow pytest.mark.xfail(...) to specify expected exceptions via diff --git a/_pytest/assertion/rewrite.py b/_pytest/assertion/rewrite.py index 589dc07d2..1f791de5e 100644 --- a/_pytest/assertion/rewrite.py +++ b/_pytest/assertion/rewrite.py @@ -131,7 +131,7 @@ class AssertionRewritingHook(object): pyc = os.path.join(cache_dir, cache_name) # Notice that even if we're in a read-only directory, I'm going # to check for a cached pyc. This may not be optimal... - co = _read_pyc(fn_pypath, pyc) + co = _read_pyc(fn_pypath, pyc, state.trace) if co is None: state.trace("rewriting %r" % (fn,)) co = _rewrite_test(state, fn_pypath) @@ -289,11 +289,13 @@ def _make_rewritten_pyc(state, fn, pyc, co): if _write_pyc(state, co, fn, proc_pyc): os.rename(proc_pyc, pyc) -def _read_pyc(source, pyc): +def _read_pyc(source, pyc, trace=None): """Possibly read a pytest pyc containing rewritten code. Return rewritten code if successful or None if not. """ + if trace is None: + trace = lambda x: None try: fp = open(pyc, "rb") except IOError: @@ -302,18 +304,21 @@ def _read_pyc(source, pyc): try: mtime = int(source.mtime()) data = fp.read(8) - except EnvironmentError: + except EnvironmentError as e: + trace('_read_pyc(%s): EnvironmentError %s' % (source, e)) return None # Check for invalid or out of date pyc file. if (len(data) != 8 or data[:4] != imp.get_magic() or struct.unpack("