pytest十四:doctest 框架
doctest 从字面意思上看,那就是文档测试。doctest 是 python里面自带的一个模块,它实际上是单元测试的一种。 官方解释:doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果
doctest 测试用例可以放在两个地方
函数戒者方法下的注释里面
模块的开头
案例
先看第一个案例,将需要测试的片段,标准格式,需要运行的代码前面加>>> ,相当于进入 cmd 这种交互环境执行,期望的结果前面不需要加>>>

运行结果
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.
从运行的结果可以看出,虽然函数下方的注释里面有其它内容“fuction: 两个数相乘”,但不会去执行,只识别“>>>”这种符号。
2 个测试用例都是通过的,实际的结果与期望的结果一致。
def mutiply(a, b):
'''
fuction: 两个数相乘
>>> mutiply(4, 3)
12
>>> mutiply('a', 3)
'aaa'
'''
return a * b if __name__=='__main__':
import doctest
doctest.testmod(verbose=True)
失败案例
doctest 的内容放到.py 模块的开头也是可以识别到的


'''
fuction: 两个数相乘
>>> mutiply(4, 8)
12
>>> mutiply('a', 5)
'aaa'
'''
def mutiply(a, b):
'''
fuction: 两个数相乘
'''
return a * b if __name__=='__main__':
import doctest
doctest.testmod(verbose=True)
verbose 参数,设置为 True 则在执行测试的时候会输出详细信息
cmd 执行
以上案例是在编辑器直接运行的,如果在 cmd 里面,也可以用指令去执行
> python -m doctest -v xxx.py
m 参数指定运行方式 doctest
-v 参数是 verbose,带上-v 参数相当于 verbose=True
pytest 运行
pytest 框架是可以兼容 doctest 用例,执行的时候加个参数 —doctest-modules ,这样它就能自动搜索到 doctest 的用例
> pytest -v --doctest-modules xxx.py
文档里面的每一行都会被执行,当遇到测试不通过的用例时,就不会继续往下执行了
doctest 独立文件

doctest 内容也可以呾代码抽离开,单独用一个.txt 文件保存
在当前 xxx.py 同一目录新建一个 xxx.txt 文件,写入测试的文档,要先导入该功能,导入代码前面也要加>>>
>>> from xxx import multiply
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
cmd 执行“python -m doctest -v xxx.txt”测试结果
pytest十四:doctest 框架的更多相关文章
- 第二十四天 框架之痛-Spring MVC(四)
6月3日,晴."绿树浓阴夏日长. 楼台倒影入池塘. 水晶帘动微风起, 满架蔷薇一院香". 以用户注冊过程为例.我们可能会选择继承AbstractController来实现表单的显示 ...
- 十四 Django框架,中间件
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...
- 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息
第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...
- 第三百一十四节,Django框架,自定义分页
第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...
- 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)
1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...
- 雅虎(yahoo)前端优化十四条军规
第一条.尽可能的减少 HTTP 的请求数 (Make Fewer HTTP Requests ) http请求是要开销的,想办法减少请求数自然可以提高网页速度.常用的方法,合并css,js(将一个页面 ...
- 无废话ExtJs 入门教程十四[文本编辑器:Editor]
无废话ExtJs 入门教程十四[文本编辑器:Editor] extjs技术交流,欢迎加群(201926085) ExtJs自带的编辑器没有图片上传的功能,大部分时候能够满足我们的需要. 但有时候这个功 ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- 使用四种框架分别实现百万websocket常连接的服务器
著名的 C10K 问题提出的时候, 正是 2001 年.这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务这个问题,当时因为硬件和软件的**,单机1万还是一个非常值 ...
随机推荐
- H5新特性总结
Web前端最新的官方标准无疑就是es6和H5了,es6之前已经说过了(多是一些语法糖),现在来总结一下H5给我们来了哪些新“朋友”吧~ 1.video/radio 视频/音频 2.canvas 绘画 ...
- Study 2 —— 图片热点区域
标记<map>和<area><img src="图片" usemap="#名称"><map id="#名称& ...
- mysql中sql语句的常用语句
1:提取公共的sql语句: 2:动态添加----sql语句: 代码: <insert id="test1" parameterType="com.floor.sho ...
- 浅谈分词算法(3)基于字的分词方法(HMM)
目录 前言 目录 隐马尔可夫模型(Hidden Markov Model,HMM) HMM分词 两个假设 Viterbi算法 代码实现 实现效果 完整代码 参考文献 前言 在浅谈分词算法(1)分词中的 ...
- winform,WPF 释放内存垃圾,减少资源占用方法
[System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern boo ...
- Javaweb学习笔记——(七)——————myexlipse基本使用、jdk5.0新特性及反射讲解
1.debug调试模式: *使用这种模式,调试程序(看到程序运行停止在这一行) -显示出来行号 -双击左边,出现一个圆点,表示设置了一个断点 *使用debug as方式,运行程序 -特使是否进入到调试 ...
- 《深入理解java虚拟机》第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略 3.1 概述 哪些内存需要回收 何时回收 如何回收 程序计数器.虚拟机栈.本地方法栈3个区域随线程而生灭. java堆和方法区的内存需要回收. 3.2 对象已死吗 ...
- 第14月第11天 linkmap
1. 4.LinkMap服务的开启方式及文件目录 Xcode->Project->Build Settings-> Search map -> 设置 Write Link Ma ...
- HashMap原理分析(JDK1.7.x之前)
HashMap 实现Map.Cloneable.Serializable接口,继承AbstractMap基类. HashMap map = new HashMap<String,String&g ...
- C语言中#ifdef,#ifndef和#endif的作用
现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...