unittest tutorial setup mock cov pytest

tutorial - Cómo ejecutar ipdb.set_trace() a voluntad al ejecutar pruebas pytest



pytest vs unittest (3)

Estoy usando pytest para mi suite de prueba. Al detectar errores en la prueba compleja de intercomponentes, me gustaría colocar import ipdb; ipdb.set_trace() import ipdb; ipdb.set_trace() en medio de mi código para permitirme depurarlo.

Sin embargo, como pytest atrapa sys.stdin / sys.stdout ipdb falla. ¿Cómo puedo usar ipdb mientras estoy probando con pytest?

No estoy interesado en saltar a pdb o ipdb después de una falla, sino a colocar rupturas en cualquier parte del código y poder depurarlo allí antes de que ocurra la falla.


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 lanzar errores, pero Pdb no ( documentos de Ipython ).


El error se produce debido a la salida de captura de py.test.

Debe ejecutar py.test con la opción -s (desactivar la salida de captura). Por ejemplo:

py.test -s my_test.py


Instala el plugin pytest-ipdb y luego usa

pytest.set_trace()