Python测试框架doctest
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相关推荐
- Python测试框架之pytest详解
目录 前言 1.pytest安装 2.Pytest的setup和teardown函数 3.Pytest配置文件 4 Pytest常用插件 4.1 前置条件: 4.2 Pytest测试报告 5.pyte ...
- Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture
Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...
- Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...
- Python测试框架pytest(03)setup和teardown
Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)Py ...
- python测试框架untest_Python测试框架之unittest和pytest
目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内.近期打算重新优化框架 ...
- gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...
大家好,我是在升职加薪道路上越奋斗头发越少的阿茅. 今天来跟想入门还徘徊在门外的小白们聊一聊 1.安装和简单使用 2.配置文件 3.断言 一. 第1步 (安装和简单使用) pytest是一个非常成熟的 ...
- Python测试框架Pytest的基础入门
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
- 全功能Python测试框架:pytest
python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest. pytest ...
- 收藏清单: python测试框架最全资源汇总
xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...
最新文章
- Spring Boot 定义接口的方法是否可以声明为 private?
- 八 python 环境安装
- [IE技巧] 如何禁止用户关闭IE浏览器
- WannaCry勒索软件还在继续传播和感染中
- python q切换指定目录_Python小工具:3秒钟将视频转换为音频
- 施一公:让科技工作成为富有吸引力的工作
- 如何在报表中实现算法的可挂接需求
- 后疫情时代,那些迎来爆发机会的产业
- JAVA之outofmemory
- 英特尔贡献基于 Kubernetes 分布式深度学习平台:Nauta
- tomcat多实例部署相关
- opencv图片序列转换成视频
- 用c#创建支持多语言的WinForm应用程序 .
- java给视频添加水印_javaCV视频添加水印
- 飞桨2.0高层api教程——使用BERT实现自动写诗
- spark学习之SparkSQL
- Java培训要多久以后才能工作?
- 人工智能的三个阶段——三个阶段总结分析
- 油菜花系统服务器能删除内容吗,在这个油菜花盛开的地方,有这样一家数字化的亲民医院...
- java圈子_从JAVA入了这个圈子,有多少老司机和他一样?