pytest捕获所有输出到stdout

时间:2018-01-06 05:34:18

标签: python stdout pytest

我测试了这样打印的'当前行'

def test_clear(capsys):
    out = capsys.readouterr()
    outputs_more_than_one_line()
    assert out.out == 'last line printed'
    # impossible to check previously printed lines?

但是,我想检查所有打印的内容。我考虑过monkeypatching builtins.print,但这似乎并不健全(不捕获sys.write.stdout)。无论如何这有可能吗?

1 个答案:

答案 0 :(得分:4)

doc说:

  

readouterr()调用到目前为止对输出进行快照 - 并且将继续捕获。

因此,您应该在打印行之后调用readouterr,而不是之前:

def test_cap(capsys):
    for _ in range(2):
        print('outputs_more_than_one_line')
    out = capsys.readouterr()
    assert out.out != 'last line printed'