Interactive debugging with nosetests in PyDev

2019-02-13 05:37发布

问题:

I'm using PyDev ( with Aptana ) to write and debug a Python Pylons app, and I'd like to step through the tests in the debugger.

Is it possible to launch nosetests through PyDev and stop at breakpoints?

回答1:

Here is what i do to run nosetests using eclipse Pydev (Hope this will help you).

first of all i create a python script and i put it in the root of my package directory :

--Package
    |
    | -- runtest.py
    |
    | -- ... (others modules) 

and in runtest.py i put:

import nose
nose.main()

now i go to in the menu Run -> Run configurations and i create a new configuration of Pydev Django i choose my package and put runtest.py in the main Module , next i go to arguments tab in the same widget and i put in Program arguments the path to my project and different arg to pass to the script example:

/home/me/projects/src --with-doctest  # Run doctests too

now after clicking on Apply i can run this configuration .

For debugging you can run this configuration in debug mode and put your break point anywhere in your code and you can use the terrific debug widget to do several action : step into, to see vars ...

N.B : for doctests sadly i don't think you can put breakpoint in the line of doctest but what you can do is to put your breakpoint in the def of the function that is called by the doctest and like that you can use the debug mode .



回答2:

Try import pydevd; pydevd.settrace() where would like a breakpoint.



回答3:

I got this working, somewhat - that is, I don't have breakpoints and stepping working but I do get PyDev to run the tests and show the results in the PyUnit view.

When you run the unit test you'll have to override the test runner to use "nose" and command line arguments "--with-pylons=path/to/test.ini" in the arguments tab of the run configuration. For example I set it to "--with-pylons=../../test.ini". Unfortunately I have to set this up separately for each test I run, I haven't found a way to put a variable or project path in there.

Also, unfortunately, I haven't been able to get breakpoints working. I tried patching as recommended in http://pydev.blogspot.ca/2007/06/why-cant-pydev-debugger-work-with.html and its comments to no avail. YMMV.

In DecoratorTools-1.8-py2.7.egg/peak/util/decorators.py in decorate_assignment(), replace:

oldtrace = [frame.f_trace]

with

oldtrace = [sys.gettrace()]