J'utilise pytest pour ma suite de tests. Lors de la capture de bogues dans un test inter-composants complexe, je voudrais placer import ipdb; ipdb.set_trace()
au milieu de mon code pour me permettre de le déboguer.
Cependant, puisque pytest intercepte sys.stdin/sys.stdout ipdb échoue. Comment puis-je utiliser ipdb pendant les tests avec pytest.
Je ne suis pas intéressé à passer à pdb ou ipdb après un échec, mais à placer des pauses n'importe où dans le code et à pouvoir le déboguer là avant l'échec.
L'erreur est déclenchée en raison de la sortie de capture pytest.
Vous devez exécuter py.test avec l'option -s
(Désactiver la sortie de capture). Par exemple:
py.test -s my_test.py
pytest-ipdb n'est malheureusement plus supporté.
La solution consiste à exécuter pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb
Depuis la commande d'aide:
pytest -h
--pdb start the interactive Python debugger on errors.
--pdbcls=modulename:classname
start a custom interactive Python debugger on errors.
For example:
--pdbcls=IPython.terminal.debugger:TerminalPdb
La différence est juste que TerminalPdb semble lancer des erreurs, mais pas Pdb ( Ipython docs ).
Installez le plugin pytest-ipdb puis utilisez
pytest.set_trace()