在PyDev中使用nosetests进行交互调试
我正在使用PyDev(配合Aptana)来编写和调试一个Python的Pylons应用程序,我想在调试器中逐步执行测试。
请问可以通过PyDev启动nosetests并在断点处暂停吗?
3 个回答
我把这个搞定了,算是有点效果——虽然我还不能使用断点和逐步调试,但我能让PyDev运行测试并在PyUnit视图中显示结果。
当你运行单元测试时,你需要在运行配置的参数选项卡中,把测试运行器改成“nose”,并添加命令行参数“--with-pylons=path/to/test.ini”。比如,我把它设置成“--with-pylons=../../test.ini”。不过很遗憾,我得为每个测试单独设置这个,没找到办法把变量或项目路径放进去。
另外,很不幸的是,我还没能让断点正常工作。我试过按照这个链接和评论里的建议去修补,但都没成功。你的情况可能会有所不同。
在DecoratorTools-1.8-py2.7.egg/peak/util/decorators.py的decorate_assignment()函数中,把:
oldtrace = [frame.f_trace]
替换成
oldtrace = [sys.gettrace()]
试试在你想要设置断点的地方加上 import pydevd; pydevd.settrace()
这行代码。
下面是我在Eclipse的Pydev中运行nosetests的方法(希望对你有帮助)。
首先,我创建一个Python脚本,并把它放在我的包目录的根目录下:
--Package
|
| -- runtest.py
|
| -- ... (others modules)
然后在runtest.py中,我写入:
import nose
nose.main()
接下来,我在菜单中选择运行 -> 运行配置,然后创建一个新的Pydev Django配置。我选择我的包,并把runtest.py放在主模块中。接着,我切换到同一个窗口的参数选项卡,在程序参数中输入我的项目路径和要传递给脚本的不同参数,例如:
/home/me/projects/src --with-doctest # Run doctests too
现在点击应用后,我就可以运行这个配置了。
如果要调试,可以在调试模式下运行这个配置,并在代码中的任何地方设置断点,这样就可以使用强大的调试工具进行多种操作:逐步执行、查看变量等等。
注意:对于doctests,遗憾的是我认为你不能在doctest的行上设置断点,但你可以在被doctest调用的函数定义上设置断点,这样就可以使用调试模式了。