有时我想在我的代码中插入一些打印语句,看看当我执行它时会打印出什么。我通常使用现有的pytest测试来“锻炼”它。但是当我运行这些时,我似乎无法看到任何标准输出(至少在我的IDE PyCharm中)。

是否有一种简单的方法可以在pytest运行期间查看标准输出?


当前回答

如果使用PyCharm IDE,则可以使用运行工具栏运行单个测试或所有测试。Run工具窗口显示应用程序生成的输出,您可以在其中看到作为测试输出的一部分的所有打印语句。

其他回答

capsys、capsysbinary、capfd和capfbinary fixture允许访问创建的stdout/stderr输出 在测试执行期间。下面是一个测试函数的例子,它执行一些与输出相关的检查:

def test_print_something_even_if_the_test_pass(self, capsys):
    text_to_be_printed = "Print me when the test pass."
    print(text_to_be_printed)
    p_t = capsys.readouterr()
    sys.stdout.write(p_t.out)
    # the two rows above will print the text even if the test pass.

结果如下:

test_print_something_even_if_the_test_pass PASSED[100%]测试通过时打印我

-s开关禁用每个测试捕获(仅当测试失败时)。

-s等价于——capture=no。

运行测试时使用-s选项。当运行测试时,exampletest.py中的所有打印语句都将被打印到控制台上。

py.test exampletest.py -s

您还可以通过在项目根目录中的pytest.ini或tox.ini中设置以下内容来启用实时日志记录。

[pytest]
log_cli = True

或者直接在cli中指定

pytest -o log_cli=True

Pytest从单个测试中捕获标准输出,并仅在某些条件下显示它们,以及默认情况下打印的测试摘要。

额外的摘要信息可以使用'-r'选项显示:

pytest -rP

显示已通过测试的捕获输出。

pytest -rx

显示捕获的失败测试的输出(默认行为)。

使用-r的输出格式比使用-s的输出格式更美观。