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


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

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

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

    使用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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

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

    执行结果如下,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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

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

  • 相关阅读:
    项目性能优化—使用JMeter压测SpringBoot项目
    左耳朵耗子:云原生的正确打开方式
    JAVA中三种I/O框架——BIO、NIO、AIO
    如果你要去拜访国外客户需要做哪些准备
    go sync.Map包装过的对象nil值的判断
    【机器学习300问】30、准确率的局限性在哪里?
    Python实现Catboost分类模型(CatBoostClassifier算法)项目实战
    R语言诊断ARIMA模型:forecast包构建了一个ARIMA模型、使用checkresiduals函数诊断ARIMA模型
    搭建Web环境、初识JSP
    Mysql进阶-详解InnoDB引擎
  • 原文地址:https://blog.csdn.net/redrose2100/article/details/128177391