hombre
Estoy usando pytest para mi conjunto de pruebas. Al detectar errores en pruebas complejas entre componentes, me gustaría colocar import ipdb; ipdb.set_trace()
en medio de mi código para permitirme depurarlo.
Sin embargo, dado que pytest atrapa sys.stdin/sys.stdout, ipdb falla. ¿Cómo puedo usar ipdb mientras pruebo con pytest?
No estoy interesado en saltar a pdb o ipdb después de una falla, sino colocar interrupciones en cualquier parte del código y poder depurarlo allí antes de que ocurra la falla.
petRUShka
El error se genera porque pytest captura la salida de forma predeterminada.
Puedes ejecutar pytest con -s
opción (desactivar salida de captura). Por ejemplo:
py.test -s my_test.py
y luego en my_test.py
:
import ipdb;
ipdb.set_trace()
-
En caso de que uno quiera hacer esto en Django, agregue
addopts = -s
apytest.ini
expediente.– Raúl Gupta
2 de diciembre de 2015 a las 17:18
louis_guitton
Desafortunadamente, pytest-ipdb ya no es compatible.
La solución es ejecutar
pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb
Desde el comando de ayuda:
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 diferencia es que TerminalPdb parece arrojar errores, pero Pdb no (documentos de ipython).
-
TerminalPdb
está funcionando nuevamente y es la solución preferida, ya que le dará la finalización de la pestaña.– Uwe L. Korn
5 de agosto de 2019 a las 17:53
-
busque ppdb, tiene introspección de calidad ipython
– msudder
3 abr 2020 a las 16:20
A partir de 2019-11 esto es lo que debería solucionarlo:
pip install ipdb gnureadline ptpython
export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'
-
si instalas
prompt-toolkit
versión2.0.10
entonces ipdb volverá a funcionar bien, porque se rompe debido a la actualización reciente de este paquete a 3.0.0– Pawel Barcik
28 de noviembre de 2019 a las 9:56
Es posible que desee dar pdbpp
un intento. He tenido más éxito con él, en comparación con ipdb
cuando se usa con pytest
. Vea mi respuesta aquí: https://stackoverflow.com/a/69320311/2896799.