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!!!
原文地址:https://www.cnblogs.com/canglongdao/p/13407202.html