python unit-testing pdb

python - pytest



¿Puedo depurar con depurador de Python cuando se utiliza py.test de alguna manera? (4)

Descubrí que puedo ejecutar py.test con la captura desactivada, luego uso pdb.set_trace () como de costumbre.

> py.test --capture=no ============================= test session starts ============================== platform linux2 -- Python 2.5.2 -- pytest-1.3.3 test path 1: project/lib/test/test_facet.py project/lib/test/test_facet.py ...> /home/jaraco/projects/project/lib/functions.py(158)do_something() -> code_about_to_run('''') (Pdb)

Estoy usando py.test para pruebas unitarias de mi programa Python. Deseo depurar mi código de prueba con el depurador de python de la manera normal (me refiero a pdb.set_trace () en el código) pero no puedo hacerlo funcionar.

Poner pdb.set_trace () en el código no funciona (aumenta IOError: leyendo de stdin mientras se captura la salida). También intenté ejecutar py.test con la opción --pdb, pero eso no parece ser el truco si quiero explorar lo que sucede antes de mi afirmación. Se rompe cuando una afirmación falla, y pasar de esa línea significa terminar el programa.

¿Alguien sabe una forma de obtener la depuración, o está depurando y py.test simplemente no está destinado a estar juntos?


La forma más fácil es usar el mecanismo py.test para crear un punto de corte

http://pytest.org/latest/usage.html#setting-a-breakpoint-aka-set-trace

import pytest def test_function(): ... pytest.set_trace() # invoke PDB debugger and tracing

O si desea que el depurador de pytest sea ​​de una sola línea, cambie su import pdb; pdb.set_trace() import pdb; pdb.set_trace() en import pytest; pytest.set_trace() import pytest; pytest.set_trace()


No estoy familiarizado con py.test, put for unittest, haz lo siguiente. Quizás py.test sea similar:

En su módulo de prueba (mytestmodule.py):

if __name__ == "__main__": unittest.main(module="mytestmodule")

Luego ejecuta la prueba con

python -m pdb mytestmodule.py

Obtendrás un shell de pdb interactivo.

Al mirar los documentos, parece que py.test tiene una opción de línea de comando --pdb :

http://codespeak.net/py/dist/test/features.html


es muy simple: ponga una assert 0 en la que desee comenzar a depurar su código y ejecutar sus pruebas con:

py.test --pdb

hecho :)

Alternativamente, si está utilizando pytest-2.0.1 o superior, también existe la pytest.set_trace() que puede colocar en cualquier parte de su código de prueba. Aquí están los docs . Tendrá cuidado de deshabilitar internamente la captura antes de enviarlo a la línea de comandos del depurador pdb.