54

我正在使用鼻子测试运行一套测试(.py 文件)。使用经典

import pdb; pdb.set_trace()

鼻子测试永远不会完成。它只是挂在设置断点的位置,但从不掉入 pdb 调试器。

任何想法为什么会这样?我尝试将断点移动到多个不同的位置(其他测试功能、其他文件)但无济于事。

4

3 回答 3

61

-s使用/选项运行鼻子,--nocapture您将能够看到 pdb 提示并与调试器正常交互。

如果使用命令行,则意味着:-

python manage.py  test -s [other-opts-and-args]
于 2012-01-26T04:13:53.420 回答
38

鼻子正在捕获输出并重定向它。所以,断点被击中,但你只是看不到它。您需要关闭输出重定向,以便调试输出显示在屏幕上。

如果您使用,鼻子可以为您做到这一点:

from nose.tools import set_trace; set_trace()

代替:

import pdb;pdb.set_trace()
于 2012-01-26T03:54:47.073 回答
0

在我的情况下,标志 -s/--nocapture 仍然没有解决它并将编译器放入 pdb。

您可以研究的另一个原因是,如果您在测试中使用 MySQL 等数据库,那么它不会被另一个同步进程锁定。就我而言,我已经启动了一个 python shell 来通过 SQL Alchemy 查询 MySQL 数据库,并且锁定了表。结果,我的鼻子测试挂了 - 没有运行/退出。

我杀死了锁定表格的python进程,而鼻子正在嗅探

> $ ps auxww | grep 蟒蛇 | awk '{打印 $2}' | 须藤 xargs 杀死 -9

于 2017-01-26T14:19:09.770 回答