pdb.set_trace() вызывает зависание носовых тестов, не попадает в отладчик

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

import pdb; pdb.set_trace()

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

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


person Bodhi    schedule 26.01.2012    source источник


Ответы (3)


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

Если вы используете командную строку, это означает: -

python manage.py  test -s [other-opts-and-args]
person stderr    schedule 26.01.2012
comment
конечно достаточно! Спасибо, Майк! Не понимал, что никакие варианты не заставят его просто проглотить все - person Bodhi; 26.01.2012
comment
если у вас есть setup.cfg, в [nosetests] добавьте строку 'nocapture = 1' - person Alex Volkov; 27.11.2012

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

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

from nose.tools import set_trace; set_trace()

вместо:

import pdb;pdb.set_trace()
person Joe L.    schedule 26.01.2012
comment
@CrazyGeek вы нашли решение для этого? БдбВыйти? - person vks; 08.01.2019
comment
Нет, я точно не помню, какой раствор я использовал. - person CrazyGeek; 09.01.2019

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

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

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

> $ ps auxww | греп питон | awk '{напечатать $2}' | sudo xargs убить -9

person Shankar ARUL    schedule 26.01.2017