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 doctest
    doctest.testmod(verbose=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

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

执行

python unnecessary_math.py
  • 1

得到输出结果是:

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.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

$ python -m doctest unnecessary_math.py
$ python -m doctest -v unnecessary_math.py
  • 1
  • 2

这里 -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‘
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

python -m doctest -v test_unnecessary_math.txt

原文地址:https://www.cnblogs.com/ExMan/p/10165471.html

时间: 2024-11-12 01:17:27

Python测试框架doctest的相关文章

Python测试框架之unittest和pytest

目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内.近期打算重新优化框架,着重解决运行效率低的问题.最近调研了一下另一种主流测试框架Pytest,Pytest是一个非常成熟的全功能的Python测试框架,本文主要对比了Unittest和Pytest这两种较为流行的Python测试框架. 一.Unittest Unittest是Python标准库中自带的单元测试框架,Un

转 python测试框架最全资源汇总

转自: http://www.testclass.net/list/python_list_1/ xUnit frameworks(单元测试框架) frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Python 2.7以及后续版本 pytest - 成熟且功能强大的单元测试框架 plugincompat - pytest的执行及兼容性插件 nosetests - 让python测试更容易一点 slash 

python测试框架&&数据生成&&工具最全资源汇总

xUnit frameworks 单元测试框架frameworks 框架unittest - python自带的单元测试库,开箱即用unittest2 - 加强版的单元测试框架,适用于Python 2.7以及后续版本pytest - 成熟且功能强大的单元测试框架plugincompat - pytest的执行及兼容性插件nosetests - 让python测试更容易一点slash - python实现的单元测试框架 extensions 扩展proboscis - 仿TestNG扩展了unit

[python测试框架学习篇] 分享一个和adb相关的测试框架

https://testerhome.com/topics/7106   (user: zteandallwinner     password: same to qq ) 264768502 · #1 · 2017年01月13日 小小的建议 没缩进不能看,不如贴gist 单纯的adb的封装有很多人写了 比如我(#厚脸皮) https://github.com/264768502/adb_wrapper 比如这贴: https://testerhome.com/topics/6938 如果要处理

python测试框架--nose

最近再浏览Python自动化测试框架,之前接触过unittest,看了篇文章,发现nose貌似更牛逼一些,于是安装试了试,分享一下心得. nose 项目是于 2005 年发布的,也就是 py.test 改名后的一年.它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装和维护.尽管 py.test 在某些方面有所进步,目前也很容易安装,但是 nose 仍然保持了易用性方面的声誉. 首先安装nose,当然前提是已经安装部署完成python,从

[python测试框架] http接口测试框架

https://testerhome.com/topics/5631 Http 接口测试框架 (思路 + 实现中 + 开源 + 可能难产) Http 接口测试框架疑问解答 Fiddler 保存会话 (请求) 说明 由于部分内容涉及公司机密,已用字母替换,不影响阅读 实际效果 验证1000个接口平均耗时6s(看机器配置及网速) 第一次投入使用,马上发现5个接口异常并且该验证过程不到30s的时间 框架的下一步 目前已兼容我们公司所有app response body全字段验证(含字段类型) 已有思路

python测试框架nose(一)

nose可以理解为是uittest扩张,不是pyhton自带框架,需要通过pip安装,结合allure框架,达到测试报告更加美观 a.通过pip安装 b.测试是否安装成功,通过输入  nosetests 命令 c.第一个demo: import nose def test_demo1(): print 'I am demo1' def test_demo2(): print 'I am demo2' if __name__ == '__main__': nose.main() 通过打开执行窗口,

python 几种常见的测试框架

1. unittest 参考文档: https://docs.python.org/3/library/unittest.html The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages. It supports test automation, sharing

Python 下的unittest测试框架

unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例:使用unittest框架编写测试用例: report:测试报告:保存测试报告,调用封装好的runcases.py,其中加入时间和HTMLTestRunner生成的带时间的测试报告; run_tests.py:执行测试用例:调用封装好的runcases.py执行用例: mail:发送邮件:封装好发送