pdb.set_trace () вызывает замороженные тесты носа, не попадает в отладчик - PullRequest
54 голосов
/ 26 января 2012

Я запускаю набор тестов (файлы .py) с использованием тестов носа. Используя классический

import pdb; pdb.set_trace()

тестирование носа просто никогда не завершается. Он просто висит там, где была установлена ​​точка останова, но никогда не падает в отладчик pdb.

Есть идеи, почему это будет? Я пытался переместить точку останова на несколько разных позиций (другие функции тестирования, другие файлы), но безрезультатно.

Ответы [ 3 ]

57 голосов
/ 26 января 2012

Запускайте нос с параметром -s / --nocapture, и вы сможете видеть приглашение pdb и нормально взаимодействовать с отладчиком.

При использовании командной строки это означает: -

python manage.py  test -s [other-opts-and-args]
33 голосов
/ 26 января 2012

Нос захватывает вывод и перенаправляет его. Итак, точка останова достигнута, но вы просто этого не видите. Вам необходимо отключить перенаправление вывода, чтобы вывод отладочной информации отображался на экране.

Нос может сделать это для вас, если вы используете:

from nose.tools import set_trace; set_trace()

вместо:

import pdb;pdb.set_trace()
0 голосов
/ 26 января 2017

В моем случае флаг флаг -s / - nocapture все еще не разрешил его и не уронил компилятор в pdb.

Еще одна причина, по которой вы могли бы взглянуть, это если вы используетебаза данных, такая как MySQL, как часть ваших тестов, которая не заблокирована другим одновременным процессом.В моем случае я запустил оболочку python для запроса базы данных MySQL через SQL Alchemy, и это заблокировало таблицы.В результате мои тесты на носу зависали - не запускались / не выходили.

Я убил процессы python, которые блокировали таблицы, и Нос снова начал копить, нюхая

> $ psauxww |grep python |awk '{print $ 2}' |sudo xargs kill -9

...