• Pytest如何执行txt格式的文本测试


    【原文链接】Pytest如何执行txt格式的文本测试

    一、在Python解释器常用的调试代码

    在讲解pytest执行txt格式的文档之前,首先看一下再Python交互解释器中常用的python调试代码,比如如下,很明显,这些都是在Python交互解释器中调试基本的运算时的用法,比如加减乘除运算的所见即所得,比如字典key值的判断等。

    >>> 1+1
    2
    >>> 2*3
    6
    >>> 4/2
    2.0
    >>> "h" in "hello"
    True
    >>> info={"age":20,"name":"Jack"}
    >>> "age" in info.keys()
    True
    >>> info["name"]=="jack"
    False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Pytest可以执行txt格式的文档,而文档的内容就是类似与上面的Python交互式解释器中的内容。

    二、Pytest执行txt格式的文本测试

    Pytest除了可以执行.py格式文件的脚本,还可以执行test*.txt格式的文本测试,比如创建一个test_demo.txt文件,文件的内容如下:

    >>> 1+1
    2
    >>> 2*3
    6
    >>> 4/2
    2.0
    >>> "h" in "hello"
    True
    >>> info={"age":20,"name":"Jack"}
    >>> "age" in info.keys()
    True
    >>> info["name"]=="jack"
    False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    然后使用pytest -s 命令执行,执行结果如下,可以看到这里显示有一个用例执行成功了。

    (demo-HCIhX0Hq) E:\demo>pytest -s
    =================== test session starts ===================
    platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0
    rootdir: E:\demo
    plugins: assume-2.4.3, rerunfailures-10.2
    collected 1 item
    
    test_demo.txt .
    
    ==================== 1 passed in 0.04s ====================
    
    (demo-HCIhX0Hq) E:\demo>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    上面执行成功了,执行结果中只显示一个passed,那么到底有没有执行呢,执行了什么呢?下面通过将txt文件中的结果改错一个位置,比如如下将判断age是否为字典的key值的结果设置为False。

    >>> 1+1
    2
    >>> 2*3
    6
    >>> 4/2
    2.0
    >>> "h" in "hello"
    True
    >>> info={"age":20,"name":"Jack"}
    >>> "age" in info.keys()
    False
    >>> info["name"]=="jack"
    False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    再次使用pytest命令执行,此时可以看到执行失败了,而当失败时会把执行的内容以及失败的位置都显示出来,如下,可以看到在010行的位置报错了,期望的是False,而实际得到的结果是True,与期望不一致了。

    (demo-HCIhX0Hq) E:\demo>pytest -s
    =================== test session starts ===================
    platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0
    rootdir: E:\demo
    plugins: assume-2.4.3, rerunfailures-10.2
    collected 1 item
    
    test_demo.txt F
    
    ======================== FAILURES =========================
    _________________ [doctest] test_demo.txt _________________
    001 >>> 1+1
    002 2
    003 >>> 2*3
    004 6
    005 >>> 4/2
    006 2.0
    007 >>> "h" in "hello"
    008 True
    009 >>> info={"age":20,"name":"Jack"}
    010 >>> "age" in info.keys()
    Expected:
        False
    Got:
        True
    
    E:\demo\test_demo.txt:10: DocTestFailure
    ================= short test summary info =================
    FAILED test_demo.txt::test_demo.txt
    ==================== 1 failed in 0.03s ====================
    
    (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
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    通过上面的例子可以得出,pytest在执行txt格式的脚本时,txt中的脚本实际上就是python交互解释器中的表达式以及对应的即时执行结果,而表达式下面的结果即为期望的结果,当表达式经过实际运算得出的结果与txt文件中此表达式下一行的结果不一致时就认为测试用欧失败。

    此外,pytest执行txt格式的文本测试,文件名也是要遵循test*.txt的格式的,比如将test_demo.txt文件修改为demo.txt文件,文本内容不变,使用pytest -s执行的结果为如下,即此时并未发现有文本测试脚本。

    (demo-HCIhX0Hq) E:\demo>pytest -s
    =================== test session starts ===================
    platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0
    rootdir: E:\demo
    plugins: assume-2.4.3, rerunfailures-10.2
    collected 0 items
    
    ================== no tests ran in 0.02s ==================
    
    (demo-HCIhX0Hq) E:\demo>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    线扫相机的使用
    深度强化学习(六)(改进价值学习)
    C Primer Plus(6) 中文版 第5章 运算符、表达式和语句 5.7 示例程序
    【web前端面试宝典】经典10问(上篇)
    JUC并发编程第七篇,volatile凭什么可以保证可见性和有序性?我们该如何正确使用它?
    移除元素(双指针)
    网络扫描与网络监听
    【问题思考】分布函数的极限【极限浅思】
    大模型prompt-文章生成
    一文了解气象观测站是什么?
  • 原文地址:https://blog.csdn.net/redrose2100/article/details/127399332