So führen Sie ipdb.set_trace () nach Belieben aus, während Sie Pytest-Tests ausführen


96

Ich verwende pytest für meine Testsuite. Während ich Fehler in komplexen Tests zwischen Komponenten abfange, möchte ich sie import ipdb; ipdb.set_trace()in die Mitte meines Codes stellen, damit ich sie debuggen kann.

Da jedoch pytest sys.stdin / sys.stdout abfängt, schlägt ipdb fehl. Wie kann ich ipdb beim Testen mit pytest verwenden?

Ich bin nicht daran interessiert, nach einem Fehler zu pdb oder ipdb zu springen, sondern Pausen an einer beliebigen Stelle im Code zu platzieren und dort zu debuggen, bevor der Fehler auftritt.

Antworten:


152

Der Fehler wird aufgrund der py.test-Erfassungsausgabe ausgelöst.

Sie sollten py.test mit der -sOption ausführen (Capture-Ausgabe deaktivieren ). Beispielsweise:

py.test -s my_test.py

10
Wenn Sie dies in Django tun möchten, fügen Sie addopts = -ses der pytest.iniDatei hinzu.
Rahul Gupta

37

pytest-ipdb wird leider nicht mehr unterstützt.

Die Lösung ist zu laufen pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

Aus dem Hilfebefehl:

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

Der Unterschied ist nur, dass TerminalPdb Fehler zu werfen scheint, Pdb jedoch nicht ( Ipython-Dokumente ).


TerminalPdbfunktioniert wieder und die bevorzugte Lösung, da Sie die Registerkarte vervollständigen können.
Uwe L. Korn

Achten Sie auf ppdb, es hat Introspektion in Ipython-Qualität
msudder

2

Das benutze ich

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


0

Ab 2019-11 sollte Folgendes behoben werden:

pip install ipdb gnureadline ptpython

export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'

1
Wenn Sie die prompt-toolkit Version 2.0.10installieren, funktioniert ipdb wieder einwandfrei, da es aufgrund der kürzlichen Aktualisierung dieses Pakets auf 3.0.0
Pawel Barcik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.