2012-01-26 5 views
51

Estoy ejecutando un conjunto de pruebas (archivos .py) usando nosetests. Usando un clásicopdb.set_trace() provocando nosetests congelados, no cae en el depurador

import pdb; pdb.set_trace() 

los nosetest se ejecutan simplemente nunca termina. Simplemente cuelga justo donde se ha establecido el punto de interrupción, pero nunca cae en el depurador pdb.

¿Alguna idea de por qué esto sería? Intenté mover el punto de interrupción a varias posiciones diferentes (otras funciones de prueba, otros archivos) sin éxito.

Respuesta

55

Ejecutar la nariz con la opción -s/--nocapture y usted será capaz de ver el AP solicitar e interactuar con el depurador normalmente.

Si se utiliza la línea de comandos que significa: -

python manage.py test -s [other-opts-and-args] 
+0

¡estoy seguro! Gracias Mike! No me di cuenta de que ninguna opción lo haría tragar todo – Bodhi

+3

si tiene setup.cfg, en [nosetests] agregue una línea 'nocapture = 1' –

30

La nariz está capturando la salida y redirigiéndola. Entonces, el punto de quiebre es golpeado, pero simplemente no lo ves. Debe desactivar la redirección de salida para que la salida de depuración aparezca en la pantalla.

nariz puede hacer esto para usted, si utiliza:

from nose.tools import set_trace; set_trace() 

en lugar de:

import pdb;pdb.set_trace() 
+1

gracias! buena alternativa – Bodhi

+0

Pero me da error fatal BdbQuit – CrazyGeek

0

En mi caso, la bandera de la bandera -s/- nocapture, todavía no se ha solucionado el problema y soltar el compilador en AP.

Otra razón que podría tener en cuenta es si está utilizando una base de datos como MySQL como parte de sus pruebas, que no está bloqueada por otro proceso simultáneo. En mi caso, había iniciado un shell de python para consultar la base de datos MySQL a través de SQL Alchemy y eso había bloqueado las tablas. Como resultado, mis pruebas de nariz estaban colgando, no corriendo/saliendo.

Maté a los procesos de pitón que fueron encerrar a las mesas y nariz era una copia de seguridad oler

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

Cuestiones relacionadas