On Wed, Jun 01, 2011 at 12:31 -0400, Vyacheslav Rafalskiy wrote: > Gentlemen! > > Thanks for your input. I really appreciate it. > > @Ronny > 1. I do agree that creating a new data convention is a big deal. > What I tried to suggest is using something that already exists in > _pytest.core.varnames(). A comment in _pytest.python.getfuncargnames() > indicates that the two functions may merge. If they do, and towards > the former, my original suggestion will *just work*. > > 2. Using decorators is a great deal for me. They are powerful and > expressive. I understand however the reluctance to open a can of worms > here. The replacement using pytest.mark below seems acceptable to me. > It still uses the same decorator function, just at a different place. > > @Holger, Ronny > Here is what I came up with: > > #---------->> in test_1.py > @pytest.mark.timeout(10) > def test_f1(): > # test here > > #---------->> in conftest.py > def pytest_runtest_call(item): > if hasattr(item.obj, 'timeout'): > timeout = item.obj.timeout.args[0] > item.obj = run_with_timeout(timeout)(item.obj) > > Your comments are welcome.
it's basically ok but there are some bits that could be improved. You are actually implementing the general test item call. Also I am not sure why you assign "item.obj = ...". I'd probably write something like this: @pytest.mark.tryfirst def pytest_pyfunc_call(pyfuncitem, __multicall__): if 'timeout' in pyfuncitem.keywords: timeout = pyfuncitem.keywords['timeout'].args[0] run_with_timeout(timeout)(__multicall__.execute) main differences: * only applies to python test function calls * hook invocation will be "tried first" before other pytest_pyfunc_call hook impls and it will call those other hooks through the "__multicall__" bit which actually represents the ongoing hook call * will call other hook implementations How do you actually implement run_with_timeout, btw? best, holger _______________________________________________ py-dev mailing list py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev