Como executar ipdb.set_trace () à vontade durante a execução de testes pytest

96

Estou usando o pytest para meu conjunto de testes. Ao detectar bugs em testes complexos de intercomponentes, gostaria de colocá- import ipdb; ipdb.set_trace()los no meio do meu código para permitir que eu o depure.

No entanto, como pytest intercepta sys.stdin / sys.stdout ipdb falha. Como posso usar o ipdb durante o teste com o pytest.

Não estou interessado em saltar para pdb ou ipdb após uma falha, mas em colocar quebras em qualquer lugar do código e ser capaz de depurá-lo antes que a falha ocorra.

manu
fonte

Respostas:

153

O erro é gerado devido à saída de captura de py.test.

Você deve executar py.test com a -sopção (desligar a saída de captura). Por exemplo:

py.test -s my_test.py
petRUShka
fonte
10
Caso queira fazer isso no Django, adicione addopts = -sao pytest.iniarquivo.
Rahul Gupta
39

Infelizmente, o pytest-ipdb não é mais compatível.

A solução é executar pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

A partir do comando help:

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

A diferença é apenas que TerminalPdb parece lançar erros, mas Pdb não ( documentos Ipython ).

louis_guitton
fonte
1
TerminalPdbestá funcionando novamente e é a solução preferida, pois permitirá o preenchimento com guia.
Uwe L. Korn
cuidado com o ppdb, ele tem introspecção de qualidade
ipython
2

Isso é o que eu uso

py.test tests/ --pdbcls=IPython.core.debugger:Pdb -s

avoliva
fonte
0

A partir de 11 de 2019, aqui está o que deve corrigir:

pip install ipdb gnureadline ptpython

export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'
Sorin
fonte
1
se você instalar a prompt-toolkit versão, 2.0.10então o ipdb funcionará bem novamente, porque ele quebra devido à atualização recente deste pacote para 3.0.0
Pawel Barcik