doctest 是一个 Python 发行版自带的标准模块。本篇将分别对使用 doctest 的两种方式——嵌入到源代码中和做成独立文件做基本介绍。

##doctest 的概念模型

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

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

即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。

doctest 的编写过程就仿佛你真的在一个交互式 shell(比如 idle)中导入了要测试的模块,然后开始一条条地测试模块里的函数一样。实际上有很多人也是这么做的,他们写好一个模块后,就在 shell 里挨个测试函数,最后把 shell 会话复制粘贴成 doctest 用例。

##举个例子

下面使用的例子是一个只有一个函数的模块,其中签入了两个 doctest 的测试用例。

unnecessary_math.py:

lang:python

"""

这里也可以写

"""

def multiply(a,b):

"""

>>> multiply(2,3)

6

>>> multiply('baka~',3)

'baka~baka~baka~'

"""

return a*b

if __name__ == '__main__':

import doctest

doctest.testmod(verbose=True)

注意测试代码的位置,前面说过 doctest 的测试用例就像文档字符串一样,这句话的内涵在于:测试用例的位置必须放在整个模块文件的开头,或者紧接着对象声明语句的下一行。也就是可以被 __doc__ 这个属性引用到的地方。并非像普通注释一样写在哪里都可以。另:verbose 参数用于控制是否输出详细信息,默认为 False,如果不写,那么运行时不会输出任何东西,除非测试 fail。

示例的运行输出为:

Trying:

multiply(2,3)

Expecting:

6

ok

Trying:

multiply('baka~',3)

Expecting:

'baka~baka~baka~'

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__ 函数另有他用的情况,则还可以通过命令行来启动测试:

$ python -m doctest unnecessary_math.py

$ python -m doctest -v unnecessary_math.py

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

##独立文件模式

如果不想(或不能)把测试用例写进源代码里,则还可以使用一个独立的文本文件来保存测试用例。

lang:python

可选的一些解释性内容...

>>> from test import multiply

>>> multiply(2,3)

6

>>> multiply('baka~',3)

'baka~baka~baka~'

几乎同样的格式。运行方法可以分为在 Python shell 里运行或者在系统 shell 里运行:

lang:python

>>> import doctest

>>> doctest.testfile('example.txt')

bash/cmd.exe:

$ python -m doctest -v example.txt

python 测试框架_Python 各种测试框架简介(一):doctest相关推荐

  1. python api测试框架_python api 测试框架

    python常用框架 Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是 ...

  2. python做性能测试框架_python api 测试框架

    python常用框架 Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是 ...

  3. python 微服务框架_Python微服务框架NameKo 性能体验

    Nameko是Python下的一个微服务框架,小巧简洁,通过RabbitMq消息组件来实现RPC服务 Github:NameKo 一.准备工作 1.RabbitMq 使用docker安装 docker ...

  4. python selenium框架_python+selenium之框架设计

    一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...

  5. python中scrapy框架_python的scrapy框架

    scrapy是python中数据抓取的框架.简单的逻辑如下所示 scrapy的结构如图所示,包括scrapy engine.scheduler.downloader.spider.item pipel ...

  6. python流行的爬虫框架_Python爬虫相关框架

    Python爬虫相关框架,Python的爬虫框架就是一些爬虫项目的半成品.比如我们可以将一些常见爬虫功能的实现代码写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据实际情况,只需要写少量需要 ...

  7. python企业级框架_Python六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  8. python企业级框架_Python六大开源框架对比:Web2py略胜一筹(转)

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  9. python 渗透框架_Python渗透测试框架:PytheM

    PytheM是一个Python渗透测试框架.它只能在osnGNU/Linux OS系统上运行. 安装$sudo apt-get update $sudo apt-get install libasou ...

  10. python自动化测试登录_Python selenium自动化测试框架入门实战--登录测试案例

    本文为Python自动化测试框架基础入门篇,主要帮助会写基本selenium测试代码又没有规划的同仁. 本文应用到POM模型.selenium.unittest框架.configparser配置文件. ...

最新文章

  1. Python使用tsne进行高维数据可视化实战:二维可视化、三维可视化
  2. []int 能转换为 []interface 吗?
  3. Springboot项目搭建(三)整合thymeleaf模板
  4. 【转】GitHub 从单机到联机:玩转 Pull Request
  5. html默认下面,阅读下面配置web默认页面index.html的代码 index.html 下面选项中,说法正确的是() (多选)...
  6. java怎么将程序保存在桌面_在Java桌面应用程序中保留数据的最佳方法是什么?...
  7. 数据分析不能挣钱、不能给公司创造利润,那要你有什么用?
  8. APK反编译之二:工具介绍
  9. 使用wininet的InternetReadFile下载文件
  10. 鸿蒙系统安装电视家,华为荣耀智慧屏系统更新,支持安装第三方APP,网友:华为妥协了...
  11. 计划了近半年的跳槽,最终是面试四家,过3家……
  12. MVC中局部视图的使用
  13. PDF处理技巧分享之PDF合并:一键实现几个PDF合并成一个PDF
  14. 谁不想拥有自己的代码仓库?
  15. 消费者需求研究能够解决什么问题
  16. 浅谈机器学习-回归与分类的区别
  17. Excel 2010 VBA 入门 110 获取最小值的自定义函数
  18. 华为入局商用市场:趋势使然,挑战颇多
  19. 支付宝扫码到银行卡的收款码(隐藏卡号)静态+动态 制作教程分享
  20. asp.net夜话之九:验证控件

热门文章

  1. Java List集合实现倒倒序排列
  2. JEE5标准与Struts/Spring/Hibernate等诸多开源框架的比较分析
  3. 51nod1355 斐波那契的最小公倍数
  4. 织梦自定义表单限制IP24小时只能提交一次方法
  5. mysql建外键失败
  6. IOS 打包后安装崩溃,debug正常运行
  7. 在ASP.NET中使用ObjectDataSource数据控件和GridView显示数据(2)
  8. [导入]关于中文文本的截取
  9. Office web component learning ---- Spreadsheet learning
  10. 原码、反码、补码解析及其简单转化