2016-02-25 66 views
0

我在包含the capfd fixture的測試中運行ipdb時遇到問題。測試代碼的削減版本是這樣的:調試器輸出未顯示

import pytest 
import sys 

def test_foo(capfd): 
    def foo(): 
     print("Hello World!") 
    foo() 
    out, err = capfd.readouterr() 
    import ipdb 
    ipdb.set_trace() 
    assert out == "Hello World!\n" 

當我運行py.test -s test/test_capfb.py,調試器的所有輸出會被抓,我什麼也看不見。我仍然可以向調試器發出命令(例如下面輸出中的c),但在整個過程完成運行之前不會輸出。輸出的樣本是在這裏:

; py.test -s tests/test_capfb.py 
============================= test session starts ============================== 
platform linux2 -- Python 2.7.5, pytest-2.8.7, py-1.4.31, pluggy-0.3.1 
rootdir: /home/usr/repos/junk, inifile: setup.cfg 
plugins: bdd-2.16.0, colordots-0.1, cov-2.2.1, html-1.7, pep8-1.0.6, xdist-1.14, catchlog-1.2.2 
collected 1 items 
tests/test_capfb.py 
c <---- I typed this! 
--Return-- 
None 
> /home/usr/repos/junk/tests/test_capfb.py(12)test_foo() 
    11  import ipdb 
---> 12  ipdb.set_trace() 
    13 
ipdb> . 
========================== 1 passed in 228.90 seconds ========================== 

有沒有辦法告訴pytestipdb涉及停止捕獲標準輸出/標準錯誤?

+0

現在,如果可能的話,與nosetests運行測試 - IPDB檢測到鼻子被加載並停止捕獲標準輸出。看起來在下一個版本(0.9.1)中會有更通用的方法:https://github.com/gotcha/ipdb/pull/84/files –

+0

@ThomasK:你的解決方案不會因爲「鼻子」對[py.test fixtures]一無所知(https://pytest.org/latest/fixture.html)。感謝您的鏈接。 – Sardathrion

回答

0

作爲工作的時候,我可以用iocapture捕獲輸出像這樣:

import pytest 
import sys 
import iocapture 

def test_foo(): 
    def foo(): 
     print("Hello World!") 
    out = None 
    with iocapture.capture() as captured: 
     foo() 
     out = captured.stdout 
    import ipdb 
    ipdb.set_trace() 
    assert out == "Hello World!\n" 
相關問題