Search code examples
pythonpython-2.7nosenosetests

Timeout on tests with nosetests


I'm setting up my nosetests environment but can't seem to get the timeout to work properly. I would like to have an x second (say 2) timeout on each test discovered by nose.

I tried the following:

nosetests --processes=-1 --process-timeout=2

This works just fine but I noticed the following:

  • Parallel testing takes longer for a few simple testcases
  • Nose does not report back when a test has timed out (and thus failed)

Does anyone know how I can get such a timeout to work? I would prefer it to work without parallel testing but this would not be an issue as long as I get the feedback that a test has timed out.


Solution

  • I do not know if this will make your life easier, but there is a similar functionality in nose.tools that will fail on timeout, and you do not have to have parallel testing for it:

    from nose.tools import timed
    
    @timed(2)
    def test_a():
        sleep(3)
    

    You can probably auto decorate all your tests in a module using a script/plugin, if manually adding an attribute is an issue, but I personally prefer clarity over magic.

    By looking through the Lib/site-packages/nose/plugins/multiprocess.py source it looks like process-timeout option that you are using is somewhat specific to managing "hanging" subprocesses that may be preventing test from completion.