Pytest----什么是实时标准输出和捕获标准输出

【原文链接】Pytest----什么是实时标准输出和捕获标准输出

在pytest中,执行日志显示其实是比较复杂的,这里将陆续地详细的讲解。首先要理解什么是实时标准输出和捕获标准输出,从字面意思来理解,实时标准输出就是在脚本执行过程中打印的标准输出,而捕获标准输出,就是在执行的过程中被后台程序捕获的标准输出,但并未在控制台打印的,pytest对捕获标准输出的处理方式是当测试用例成功时,捕获标准输出不会打印,而当测试用例失败时,才会将捕获标准输出打印处理。
为了更好的和后续实时日志和捕获日志区分开来,这里要特别说明的是这里得标准输出主要是指stdout中的内容,通俗点来理解,就可以暂时简单地理解为通过print语句打印的内容。
首先看如下一段测试代码,这里在测试脚本中打印了一句话,然后测试断言是成功的。

def test_demo():
    print("in test_demo ...")
    assert 1==1

使用pytest命令执行结果如下,这里好像并没有什么特别之处,这里需要说明的是,print语句打印的内容要么在实时标准输出中,要么在捕获标准输出中,即不会同时在实时标准输出和捕获标准输出中,这里因为用例通过,所以根据pytest的机制是不会显示捕获标准输出的,因此这里只显示了实时标准输出,但是从打印的记过可以看出,这里并未打印测试脚本中打印的那一行话,这是因为在默认情况下,是开启捕获实时输出的,换句话当用pytest命令执行时,print的内容时自动打印到捕获标准输出的。

(demo-HCIhX0Hq) E:\demo>pytest
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 1 item

test_demo.py .                                       [100%]

==================== 1 passed in 0.02s ====================

(demo-HCIhX0Hq) E:\demo>

为了能显示出捕获标准输出,我们可以将测试脚本中的断言改为失败,如下:

def test_demo():
    print("in test_demo ...")
    assert 1==2

执行结果如下,Captured stdout call 下面的一行内容即捕获标准输出的内容,显然这里打印出来了。

(demo-HCIhX0Hq) E:\demo>pytest
=================== test session starts ===================
platform win32 -- Python 3.7.9, pytest-7.2.0, pluggy-1.0.0
rootdir: E:\demo
plugins: assume-2.4.3, rerunfailures-10.2
collected 1 item

test_demo.py F                                       [100%]

======================== FAILURES =========================
________________________ test_demo ________________________

    def test_demo():
        print("in test_demo ...")
>       assert 1==2
E       assert 1 == 2

test_demo.py:4: AssertionError
------------------ Captured stdout call -------------------
in test_demo ...
================= short test summary info =================
FAILED test_demo.py::test_demo - assert 1 == 2
==================== 1 failed in 0.07s ====================

(demo-HCIhX0Hq) E:\demo>

这就是实时标准输出和捕获标准输出,pytest的设计原理也是有道理的,即在默认情况下,是开启捕获标准输出的,这样一来,当执行一批自动化脚本的时候,脚本中通过print打印的信息都会记录到捕获标准输出中,而当用例失败时,会在执行完成脚本之后交给捕获标准输出都打印出来,这样一来就极大的方便了问题定位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值