doctest是python自带的一个模块。本博客将介绍doctest的两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件。

doctest 的概念模型


在python的官方文档中,对doctest是这样介绍的:

doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证结果。

从名字上是否会让你联想到docstring呢?

doctest的编写过程就像你在一个交互式shell中导入了一个被测试模块,然后一条一条执行被测试模块里面的函数一样。其实实际上doctest也是这么编写的,写好一个模块之后,在shell中测试这个模块里面的函数,将shell会话中的内容复制粘贴成doctest用例。

doctest嵌入源码中


下面的模块只有一个函数,里面嵌入了两个doctest测试用例。
unnecessary_math.py:

'''
这个例子展示如何在源码中嵌入doctest用例。
'>>>' 开头的行就是doctest测试用例。
不带 '>>>' 的行就是测试用例的输出。
如果实际运行的结果与期望的结果不一致,就标记为测试失败。
'''
def multiply(a, b):""">>> multiply(4, 3)12>>> multiply('a', 3)'aaa'"""return a * b
if __name__=='__main__':import doctestdoctest.testmod(verbose=True)

有两个地方可以放doctest测试用例,一个位置是模块的最开头,另一个位置是函数声明语句的下一行(就像上面的例子这样)。除此之外的其它地方不能放,放了也不会执行。

那个verbose参数,如果设置为True则在执行测试的时候会输出详细信息。默认是False,表示运行测试时,只有失败的用例会输出详细信息,成功的测试用例不会输入任何信息。

执行

python unnecessary_math.py

得到输出结果是:

liuchunmings-MacBook-Pro:exersice liuchunming$ python unnecessary_math.py
Trying:multiply(4, 3)
Expecting:12
ok
Trying:multiply('a', 3)
Expecting:'aaa'
ok
1 items had no tests:__main__
1 items passed all tests:2 tests in __main__.multiply
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

上面启动测试的方式是在__main__函数中调用了doctest.testmod()方法。如果__main__函数有其他用途,不方便调用doctest.testmod()方法,那么可以用另外一种执行测试的方法:

$ python -m doctest unnecessary_math.py
$ python -m doctest -v unnecessary_math.py

这里 -m 表示引用一个模块,-v 等价于 verbose=True。运行输出与上面基本一样。

doctest独立文件


如果不想将doctest测试用例嵌入到python的源码中,则可以建立一个独立的文本文件来保存测试用例。
将doctest测试用例从上面的python源码中剥离出来放到test_unnecessary_math.txt文件里。

这个例子展示如何将doctest用例放到一个独立的文件中。
'>>>' 开头的行就是doctest测试用例。
不带 '>>>' 的行就是测试用例的输出。
如果实际运行的结果与期望的结果不一致,就标记为测试失败。

>>> from unnecessary_math import multiply
>>> multiply(3, 4)
12
>>> multiply(‘a’, 3)
‘aaa’

注意:from 那一行也要以>>>开头。
在系统的shell中执行:

python -m doctest -v test_unnecessary_math.txt

Python测试框架doctest相关推荐

  1. Python测试框架之pytest详解

    目录 前言 1.pytest安装 2.Pytest的setup和teardown函数 3.Pytest配置文件 4 Pytest常用插件 4.1 前置条件: 4.2 Pytest测试报告 5.pyte ...

  2. Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...

  3. Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...

  4. Python测试框架pytest(03)setup和teardown

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 ​​​​​​Python测试框架pytest(02)Py ...

  5. python测试框架untest_Python测试框架之unittest和pytest

    目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内.近期打算重新优化框架 ...

  6. gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...

    大家好,我是在升职加薪道路上越奋斗头发越少的阿茅. 今天来跟想入门还徘徊在门外的小白们聊一聊 1.安装和简单使用 2.配置文件 3.断言 一. 第1步 (安装和简单使用) pytest是一个非常成熟的 ...

  7. Python测试框架Pytest的基础入门

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  8. 全功能Python测试框架:pytest

    python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest. pytest ...

  9. 收藏清单: python测试框架最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...

最新文章

  1. Spring Boot 定义接口的方法是否可以声明为 private?
  2. 八 python 环境安装
  3. [IE技巧] 如何禁止用户关闭IE浏览器
  4. WannaCry勒索软件还在继续传播和感染中
  5. python q切换指定目录_Python小工具:3秒钟将视频转换为音频
  6. 施一公:让科技工作成为富有吸引力的工作
  7. 如何在报表中实现算法的可挂接需求
  8. 后疫情时代,那些迎来爆发机会的产业
  9. JAVA之outofmemory
  10. 英特尔贡献基于 Kubernetes 分布式深度学习平台:Nauta
  11. tomcat多实例部署相关
  12. opencv图片序列转换成视频
  13. 用c#创建支持多语言的WinForm应用程序 .
  14. java给视频添加水印_javaCV视频添加水印
  15. 飞桨2.0高层api教程——使用BERT实现自动写诗
  16. spark学习之SparkSQL
  17. Java培训要多久以后才能工作?
  18. 人工智能的三个阶段——三个阶段总结分析
  19. 油菜花系统服务器能删除内容吗,在这个油菜花盛开的地方,有这样一家数字化的亲民医院...
  20. java圈子_从JAVA入了这个圈子,有多少老司机和他一样?

热门文章

  1. Javapinyin4J实现中文名转拼音
  2. PCIE4.0 简单介绍
  3. 技术人如何搭建自己的技术博客
  4. 4. Brackets 前端编辑器试用
  5. 查看mysql数据库大小、表大小和最后修改时间
  6. ASP.NET的状态管理
  7. 使用群集保障SQL Server 2005的高可用性(2)
  8. i java_Java中的i++和i--
  9. Xilinx SDK中分配变量的存储地址
  10. Does not match the target endianness, not loaded.问题解决方案