dbr dbr - 8 days ago 4
Python Question

Is there something like 'autotest' for Python unittests?

Basically, growl notifications (or other callbacks) when tests break or pass. Does anything like this exist?

If not, it should be pretty easy to write.. Easiest way would be to..


  1. run
    python-autotest myfile1.py myfile2.py etc.py



    • Check if files-to-be-monitored have been modified (possibly just if they've been saved).

    • Run any tests in those files.

    • If a test fails, but in the previous run it passed, generate a growl alert. Same with tests that fail then pass.

    • Wait, and repeat steps 2-5.




The problem I can see there is if the tests are in a different file. The simple solution would be to run all the tests after each save.. but with slower tests, this might take longer than the time between saves, and/or could use a lot of CPU power etc..

The best way to do it would be to actually see what bits of code have changed, if function abc() has changed, only run tests that interact with this.. While this would be great, I think it'd be extremely complex to implement?

To summarise:


  • Is there anything like the Ruby tool
    autotest
    (part of the ZenTest package), but for Python code?

  • How do you check which functions have changed between two revisions of a script?

  • Is it possible to determine which functions a command will call? (Somewhat like a reverse traceback)


jkp jkp
Answer

I found autonose to be pretty unreliable but sniffer seems to work very well.

$ pip install sniffer
$ cd myproject

Then instead of running "nosetests", you run:

$ sniffer

Or instead of nosetests --verbose --with-doctest, you run:

$ sniffer -x--verbose -x--with-doctest

As described in the readme, it's a good idea to install one of the platform-specific filesystem-watching libraries, pyinotify, pywin32 or MacFSEvents (all installable via pip etc)