कैसे pytest परीक्षण चलाते समय ipdb.set_trace () को निष्पादित करें


96

मैं अपने परीक्षण सूट के लिए सबसे अधिक उपयोग कर रहा हूँ। जटिल अंतर-घटक परीक्षण में कीड़े को पकड़ते समय, मैं जगह देना चाहूंगाimport ipdb; ipdb.set_trace() अपने कोड के बीच में ताकि मुझे इसे डिबग करने की अनुमति मिल सके।

हालाँकि, चूंकि pytest traps sys.stdin / sys.stdout ipdb विफल रहता है। Pytest के साथ परीक्षण करते समय मैं ipdb का उपयोग कैसे कर सकता हूं

मैं एक विफलता के बाद pdb या ipdb में कूदने में दिलचस्पी नहीं रखता, लेकिन कोड में कहीं भी ब्रेक लगाने और विफलता होने से पहले वहां डिबग करने में सक्षम हो सकता हूं।

जवाबों:


153

Py.test कैप्चरिंग आउटपुट के कारण त्रुटि उठाई गई है।

आपको -sविकल्प के साथ py.test चलाना चाहिए (कैप्चर आउटपुट बंद करें)। उदाहरण के लिए:

py.test -s my_test.py

10
मामले में एक Django में यह करने के लिए, जोड़ने चाहता है addopts = -sके लिए pytest.iniफ़ाइल।
राहुल गुप्ता

39

pytest-ipdb दुर्भाग्य से अब समर्थित नहीं है।

हल चलाना है pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

सहायता कमांड से:

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

फर्क सिर्फ इतना है कि TerminalPdb इरॉस फेंकता है, लेकिन Pdb नहीं ( Ipython डॉक्स )।


1
TerminalPdbफिर से काम कर रहा है और पसंदीदा समाधान है क्योंकि यह आपको टैब पूरा करेगा।
उवे एल। कॉर्न

ppdb के लिए देखें, तो इसका ipython क्वालिटी आत्मनिरीक्षण मिला
msudder

2

यही है वह जो मेरे द्वारा उपयोग किया जाता है

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


0

2019-11 के अनुसार यहां यह तय करना चाहिए:

pip install ipdb gnureadline ptpython

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

1
यदि आप prompt-toolkit संस्करण स्थापित 2.0.10करते हैं तो ipdb फिर से ठीक काम करेगा, क्योंकि इस पैकेज के हालिया अद्यतन के कारण यह
टूटकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.