Установка контрольных точек с помощью nosetests - опция pdb

nosetests --pdb позволяют мне остановиться из-за ошибки или неудачи, но это слишком поздно для моих нужд. Прохождение кода во время выполнения помогает мне отладить, где проблема.

Тем не менее, тесты носа полезны, поскольку они допускают тесты, основанные на относительном импорте (т.е. Тесты в пакете).

Как я могу установить контрольные точки перед выполнением тестов? В настоящее время я использую:

python -m pdb /path/to/my/nosetests testfile.py

Это решение не подходит. Nosetests мешает выводу pdb, и мои элементы управления клавиатуры (например, клавиши со стрелками) не работают.

Использование import pdb; pdb.set_trace() может показаться хорошей идеей, однако тестирование носа блокирует мой доступ к консоли pdb.

Ответ 1

Вы можете добавить

import pdb; pdb.set_trace() 

в любом месте вашего источника, который вы хотите остановить в отладчике.

Убедитесь, что вы проходите -s в нос, чтобы он не захватывал stdout.

Ответ 2

Даже лучше, чем использовать -s, это использовать вариант set_trace, который поставляется с носом. Добавить

from nose.tools import set_trace; set_trace()

где бы вы ни захотели войти в отладчик. Перенаправление stdin/out будет позаботиться о вас. Единственный странный побочный эффект, с которым я столкнулся, заключается в невозможности перезапуска вашего кода из pdb (используя run) во время отладки во время ночного запуска.

Ответ 3

Если у вас есть ipython, для неограниченной пользы используйте:

import ipdb; ipdb.set_trace() 

* Неограниченная удивительность: как ipython - автозаполнение, раскраска и т.д.

Ответ 4

Если вы используете pytest, вы можете использовать

import pytest; pytest.set_trace()

Смотрите документацию.