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
:
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.