pdb.set_trace () provoquant un gel de nosetestests, ne tombe pas dans le débogueur

J’exécute une suite de tests (fichiers .py) utilisant nosetestests. En utilisant un classique

import pdb; pdb.set_trace() 

les tests de nosetests ne se terminent jamais. Il se bloque juste à l’endroit où le point d’arrêt a été défini, mais ne tombe jamais dans le débogueur pdb.

Des idées pourquoi ce serait? J’ai essayé de déplacer le point d’arrêt vers un certain nombre de positions différentes (autres fonctions de test, autres fichiers) en vain.

Exécutez nez avec l’option -s / --nocapture et vous pourrez voir l’invite pdb et interagir avec le débogueur normalement.

Si vous utilisez la ligne de commande, cela signifie: –

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

Le nez capture la sortie et la redirige. Donc, le point d’arrêt est touché, mais vous ne le voyez pas. Vous devez désactiver la redirection de sortie pour que la sortie de débogage s’affiche à l’écran.

Le nez peut le faire pour vous, si vous utilisez:

 from nose.tools import set_trace; set_trace() 

au lieu de:

 import pdb;pdb.set_trace() 

Dans mon cas, le drapeau flag -s / – nocapture, ne l’a toujours pas résolu et place le compilateur dans pdb.

Une autre raison que vous pourriez rechercher est que si vous utilisez une firebase database telle que MySQL dans le cadre de vos tests, cela ne sera pas verrouillé par un autre processus simultané. Dans mon cas, j’avais lancé un shell python pour interroger la firebase database MySQL via SQL Alchemy et qui avait verrouillé les tables. En conséquence, mes tests de nez étaient suspendus – pas en cours d’exécution / de sortie.

J’ai tué les processus python qui bloquaient les tables et Nose était en train de renifler

> $ ps auxww | grep python | awk ‘{print $ 2}’ | sudo xargs tue -9