• pytest(十八)--doctest测试框架


    前言

    doctest从字面意思上看,那就是文档测试。doctest是python里面自带的一个模块,它实际上是单元测试的一种。

    官方解释:doctest模块会搜索哪些看起来像交互式会话的python代码片段,然后尝试执行并验证结果。

    doctest测试用例可以放在两个地方:

      函数或者方法下的注释里面

      模块的开头

    案例

    先看第一个案例,将需要测试的片段,标准格式,需要允许的代码前面加>>>,相当于进入cmd这种交互环境执行,期望的结果前面不需要加>>>

    放到by函数的注释里

    def by(m,n):
        """
        function:两个数相乘
        >>> by(4,3)
        12
        >>> by('ab',3)
        'ababab'
        """
        return m*n
    if __name__=="__main__":
        import doctest
        doctest.testmod(verbose=True)  

    运行结果

     从运行的结果可以看出,虽然函数下方的注释里面有其它内容"function:两个数相乘",但不会去执行,只识别">>>"这种符号。2个测试用例都是通过的,实际的结果与期望的结果一致。

    失败案例

    doctest的内容放到.py模块的开头也是可以识别到的

    """
     function:两个数相乘
     >>> by(4,3)
     10
     >>> by('ab',3)
     'abab'
     """
    def by(m,n):
        return m*n
    if __name__=="__main__":
        import doctest
        doctest.testmod(verbose=True)  

    运行结果2个都失败

    *****************************************************************
    1 items had failures:
       2 of   2 in __main__
    2 tests in 2 items.
    0 passed and 2 failed.
    ***Test Failed*** 2 failures.
    

    verbose参数,设置为True,则在执行测试的时候回输出详细信息

    cmd执行

    以上案例是在编辑器直接运行的,如果在cmd里面,也可以用指令去执行。

    python -m doctest -v lianxi.py
    
    • m参数指定运行方式doctest
    • -v参数是verbose,带上-v参数相当于verbose=True

     pytest运行

    pytest框架可以兼容doctest用例,执行的时候加个参数 --doctest-modules,这样它就能自动搜索到doctest的用例

    pytest -v --doctest-modules lianxi.py

     结果可以看出,文档里面的第一行被执行了,当遇到测试不通过的用例时,就不会继续往下执行了。

    doctest独立文件

    doctest内容也可以和代码抽离开,单独用一个.txt文件保存

     在当前lianxi.py同一目录新建一个aa.txt文件(名字可以随意命名),写入测试的文档,需先导入该功能,导入代码前面也要加>>>

    >>> from lianxi import by
    >>> by(4,3)
    12
    >>> by('ab',3)
    'ababab'
    

    cmd执行"python -m doctest -v aa.txt",测试结果如下:

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    bzoj 4606: [Apio2008]DNA【dp】
    UOJ #206. 【APIO2016】Gap【交互题】
    bzoj 4071: [Apio2015]巴邻旁之桥【splay】
    bzoj 4069: [Apio2015]巴厘岛的雕塑【dp】
    bzoj 4070: [Apio2015]雅加达的摩天楼【spfa】
    洛谷 P3625 [APIO2009]采油区域【枚举】
    bzoj 1178: [Apio2009]CONVENTION会议中心(少见做法掉落!)【贪心+二分】
    bzoj 1179: [Apio2009]Atm【tarjan+spfa】
    洛谷 P3621 [APIO2007]风铃【贪心】
    bzoj 4898: [Apio2017]商旅【Floyd+分数规划+二分】
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13407202.html
Copyright © 2020-2023  润新知