Pytest testleri çalıştırılırken ipdb.set_trace () irade tarafından nasıl çalıştırılır


99

Test paketim için pytest kullanıyorum. Karmaşık bileşenler arası testte hataları yakalarken, hata import ipdb; ipdb.set_trace()ayıklamama izin vermek için kodumun ortasına yerleştirmek istiyorum.

Ancak, pytest sys.stdin / sys.stdout ipdb'yi tuzağa düşürdüğü için başarısız olur. Pytest ile test ederken ipdb'yi nasıl kullanabilirim.

Bir başarısızlıktan sonra pdb veya ipdb'ye atlamakla ilgilenmiyorum, ancak kodun herhangi bir yerine sonlar yerleştirmek ve hata oluşmadan önce orada hata ayıklamakla ilgileniyorum.

Yanıtlar:


155

Hata, py.test'in çıktıyı yakalaması nedeniyle ortaya çıktı.

Py.test -sseçeneğini seçenekle çalıştırmalısınız (yakalama çıktısını kapatın). Örneğin:

py.test -s my_test.py

11
Durumda bir, Django bunu eklemek istiyor addopts = -siçin pytest.inidosyanın.
Rahul Gupta

41

pytest-ipdb maalesef artık desteklenmiyor.

Çözüm koşmaktır pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

Yardım komutundan:

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

Aradaki fark, TerminalPdb'nin hatalar atıyor gibi görünmesi, ancak Pdb'nin ( Ipython belgeleri ) olmamasıdır .


1
TerminalPdbtekrar çalışıyor ve size sekme tamamlamayı sağlayacağı için tercih edilen çözüm.
Uwe L. Korn

ppdb'ye dikkat edin, ipython kalitesinde iç gözlemi var
msudder

2

Bu benim kullandığım şey

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


0

2019-11 itibariyle, düzeltilmesi gereken şey:

pip install ipdb gnureadline ptpython

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

1
Eğer prompt-toolkit sürümü 2.0.10yüklerseniz, ipdb tekrar düzgün çalışacaktır, çünkü bu paketin
3.0.0'a yapılan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.