2017-09-13 121 views
0

我试图从pytest(Python版本3.6)中的stdout/print语句捕获输出python pytest:捕获标准输出总是失败

这总是失败:

message = 'The meaning of life is not actually 42\n' 

def print_greeting(): 
    """print 42 to stdout""" 

    # write to stdout 
    sys.stdout.write(message)   # this fails 

    # print to stdout 
    print('Message again: ', message) # this fails too 


def test_printgreeting(capsys): 
    """assert '42' was printed to stdout""" 

    # capture stdout/stderr 
    out, err = capsys.readouterr() 
    print_greeting() 

    # 42 should be in stdout from sys.stdout.write 
    assert '42' in out 

结果从pytest:

========================================================= test session starts ========================================================== 

collected 1 item 

test.py 
The meaning of life is not actually 42 
F 

=============================================================== FAILURES =============================================================== 
__________________________________________________________ test_printgreeting __________________________________________________________ 
test.py:42: in test_printgreeting 
    assert '42' in out 
E AssertionError: assert '42' in '' 
======================================================= 1 failed in 0.03 seconds ======================================================= 

这是为什么不拍摄?

回答

2

你需要调用readouterr打印:

def test_printgreeting(capsys): 
    """assert '42' was printed to stdout""" 

    # capture stdout/stderr 
    print_greeting() 
    out, err = capsys.readouterr() 

    # 42 should be in stdout from sys.stdout.write 
    assert '42' in out 
+0

我的上帝。我用了三个小时的时间对此感到震惊。 >,< – emf

+0

非常感谢sooooo。 – emf