pytest文档19-doctest测试框架
前言
doctest从字面意思上看,那就是文档测试。doctest是python里面自带的一个模块,它实际上是单元测试的一种。
官方解释:doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果
doctest测试用例可以放在两个地方
- 函数或者方法下的注释里面
- 模块的开头
案例
先看第一个案例,将需要测试的片段,标准格式,需要运行的代码前面加>>> ,相当于进入cmd这种交互环境执行,期望的结果前面不需要加>>>
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
放到multiply函数的注释里
def multiply(a, b):
"""
fuction: 两个数相乘
>>> multiply(4, 3)
12
>>> multiply('a', 3)
'aaa'
"""
return a * b
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
运行结果
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个测试用例都是通过的,实际的结果与期望的结果一致。
失败案例
doctest的内容放到.py模块的开头也是可以识别到的
# 保存为xxx.py
'''
fuction: 两个数相乘
>>> multiply(4, 8)
12
>>> multiply('a', 5)
'aaa'
'''
def multiply(a, b):
"""
fuction: 两个数相乘
"""
return a * b
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 xxx.py
- m 参数指定运行方式doctest
- -v参数是verbose,带上-v参数相当于verbose=True

pytest运行
pytest框架是可以兼容doctest用例,执行的时候加个参数 --doctest-modules ,这样它就能自动搜索到doctest的用例
$ pytest -v --doctest-modules xxx.py

如下是函数下的文档
fuction: 两个数相乘
>>> multiply(4, 3)
12
>>> multiply('a', 5)
'aaa'
运行结果
D:\test1122\a>pytest -v --doctest-modules xxx.py
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- d:\soft\
python3.6\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.0', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages':
{'pytest': '3.6.3', 'py': '1.5.4', 'pluggy': '0.6.0'}, 'Plugins': {'metadata': '
1.7.0', 'html': '1.19.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'D:\\soft\\j
dk18\\jdk18v'}
rootdir: D:\test1122\a, inifile:
plugins: metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10
collected 1 item
xxx.py::xxx.multiply FAILED [100%]
================================== FAILURES ===================================
___________________________ [doctest] xxx.multiply ____________________________
004
005 fuction: 两个数相乘
006 >>> multiply(4, 3)
007 12
008 >>> multiply('a', 5)
Expected:
'aaa'
Got:
'aaaaa'
D:\test1122\a\xxx.py:8: DocTestFailure
========================== 1 failed in 0.16 seconds ===========================
结果可以看出,文档里面的每一行都被执行了,当遇到测试不通过的用例时,就不会继续往下执行了
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”测试结果
D:\test1122>python -m doctest -v xxx.txt
Trying:
from xxx import multiply
Expecting nothing
ok
Trying:
multiply(4, 3)
Expecting:
12
ok
Trying:
multiply('a', 3)
Expecting:
'aaa'
ok
1 items passed all tests:
3 tests in xxx.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.
---------------------------------pytest结合selenium自动化完整版-------------------------
全书购买地址 https://yuedu.baidu.com/ebook/902224ab27fff705cc1755270722192e4536582b
作者:上海-悠悠 QQ交流群:874033608
也可以关注下我的个人公众号:yoyoketang

pytest文档19-doctest测试框架的更多相关文章
- 洗礼灵魂,修炼python(21)--自定义函数(2)—函数文档,doctest模块,形参,实参,默认参数,关键字参数,收集参数,位置参数
函数文档 1.什么是函数文档: 就是放在函数体之前的一段说明,其本身是一段字符串,一个完整的函数需要带有函数文档,这样利于他人阅读,方便理解此函数的作用,能做什么运算 2.怎么查看函数文档: func ...
- pytest文档3-pycharm运行pytest
前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...
- pytest文档7-pytest-html生成html报告
前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github. ...
- 理解MFC 文档、视图、框架[转]
理解文档/视图框架 出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...
- MFC文档、视图和框架
文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档 文档对象用于管理和维护数据,包括保存数据.取出数据以及 ...
- swagger-ui生成api文档并进行测试
一.Swagger UI简介 Swagger UI是一个API在线文档生成和测试的利器,目前发现最好用的.它的源码也开源在GitHub上,地址:GitHub: https://github.com/s ...
- VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或 ...
- VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)
前面一节中鸡啄米进行了文档.视图和框架的概述,本节主要讲解文档.视图.框架结构中各对象之间的关系. 各个对象之间的关系 文档.视图.框架结构中涉及到的对象主要有:应用程序对象.文档模板对象.文档对象. ...
- VS2010/MFC编程入门之三十九(文档、视图和框架:概述)
前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...
- VS2010-MFC(文档、视图和框架:分割窗口)
转自:http://www.jizhuomi.com/software/226.html 上一节讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 ...
随机推荐
- HBase入门笔记--读性能优化
一.前言 在生产环境使用HBase过程中,随着数据量的不断增加,查询HBase数据变得越来越慢,对于业务来说是不可用的,需要对读性能进行优化 二.问题定位 从hbase监控指标来看,发现FullGC次 ...
- 大数据统计分析平台之三、Kibana安装和使用
kibana安装 1.到官网下载kibana: cd /usr/local/software wget https://artifacts.elastic.co/downloads/kibana/ki ...
- Sublime Text安装SVN插件
下载插件 Sublime Text2/3 SVN插件 点击下载 安装插件 点击设置(Preferences)->浏览程序包(Browse Packages,,,),新建TortoiseSVN文件 ...
- javascript json字符串转json对象方法
/* * @method 将拼接好字符串格式的json 转成json对象 * @param jsonData param fomart: * var jsonData = "{name1:' ...
- .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ...
- 安装loadrunner11,卸载360浏览器后提示“无效的应用程序路径!请检查应用程序是否存在!”
我安装的loadrunner是11版本的,安装之前我的电脑上有安装了很多的浏览器,结果一开始录制脚本的时候,页面直接跳转到360浏览器上面了,但是显示正在录制的脚本为0个,于是就把360给卸载了,进行 ...
- Bad connection to FS. command aborted. exception: Call to chaoren/192.168.80.100:9000 failed on connection exception: java.net.ConnectException: Connection refused
Bad connection to FS. command aborted. exception: Call to chaoren/192.168.80.100:9000 failed on conn ...
- OSPF详解
OSPF 详解 (1) [此博文包含图片] (2013-02-04 18:02:33) 转载 ▼ 标签: 端的 第二 以太 第一个 正在 目录 序言 初学乍练 循序渐进学习OSPF 朱皓 入门之前 了 ...
- ubuntu 安装 Sqlite 和 可视化工具 SqliteBroswer
ubuntu 安装 Sqlite 和 可视化工具 SqliteBroswer 下载sqlite www.sqlite.org/download.html 安装Sqlite 创建一个目录: ...
- kafka和springboot整合应用
加载依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>s ...