Bagaimana menjalankan ipdb.set_trace () sesuka hati saat menjalankan tes pytest


96

Saya menggunakan pytest untuk rangkaian pengujian saya. Saat menemukan bug dalam pengujian antar-komponen yang kompleks, saya ingin menempatkannya import ipdb; ipdb.set_trace()di tengah kode agar saya dapat men-debugnya.

Namun, karena pytest menjebak sys.stdin / sys.stdout ipdb gagal. Bagaimana saya bisa menggunakan ipdb saat menguji dengan pytest.

Saya tidak tertarik untuk beralih ke pdb atau ipdb setelah kegagalan, tetapi untuk menempatkan jeda di mana saja dalam kode dan dapat men-debugnya di sana sebelum kegagalan terjadi.

Jawaban:


153

Kesalahan dimunculkan karena py.test menangkap keluaran.

Anda harus menjalankan py.test dengan -sopsi (matikan keluaran tangkapan). Sebagai contoh:

py.test -s my_test.py

10
Dalam kasus seseorang ingin melakukan ini di Django, tambahkan addopts = -ske pytest.inifile.
Rahul Gupta

39

pytest-ipdb sayangnya tidak didukung lagi.

Solusinya adalah lari pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

Dari perintah bantuan:

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

Perbedaannya hanya TerminalPdb tampaknya membuat kesalahan, tetapi Pdb tidak ( dokumen Ipython ).


1
TerminalPdbberfungsi kembali dan solusi yang disukai karena akan memberi Anda penyelesaian tab.
Uwe L. Korn

hati-hati untuk ppdb, yang punya introspeksi kualitas
ipython

2

Ini yang saya gunakan

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


0

Pada 2019-11, inilah yang harus memperbaikinya:

pip install ipdb gnureadline ptpython

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

1
jika Anda menginstal prompt-toolkit versi 2.0.10maka ipdb akan berfungsi dengan baik lagi, karena rusak karena pembaruan terbaru dari paket ini ke 3.0.0
Pawel Barcik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.