我正在使用nosetests运行一套测试(.py文件)。使用经典
import pdb; pdb.set_trace()
鼻子测试从未完成。它只是在设置断点的地方挂起,但永远不会掉入pdb调试器。
任何想法为什么会这样?我已经尝试将断点移动到许多不同的位置(其他测试功能,其他文件)无济于事。
答案 0 :(得分:56)
使用-s
/ --nocapture
选项运行nose,您将能够看到pdb提示符并正常与调试器进行交互。
如果使用命令行,则意味着: -
python manage.py test -s [other-opts-and-args]
答案 1 :(得分:32)
Nose正在捕获输出并重定向它。因此,断点被击中,但你只是看不到它。您需要关闭输出重定向,以便调试输出显示在屏幕上。
如果你使用的话,Nose可以为你做这个:
from nose.tools import set_trace; set_trace()
而不是:
import pdb;pdb.set_trace()
答案 2 :(得分:0)
在我的情况下,标志为-s / - nocapture标志,仍然没有解析它并将编译器放入pdb。
您可以研究的另一个原因是,如果您使用MySQL等数据库作为测试的一部分,那么它不会被另一个同步进程锁定。在我的例子中,我已经启动了一个python shell来通过SQL Alchemy查询MySQL数据库并锁定了表。结果,我的鼻子测试挂了 - 没有跑/退出。
我杀死了锁定表格的蟒蛇进程,而Nose又回来了嗅探
<强>&GT; $ ps auxww | grep python | awk'{print $ 2}'| sudo xargs kill -9