python 几种常用测试框架
测试的常用规则
- 一个测试单元必须关注一个很小的功能函数,证明它是正确的;
- 每个测试单元必须是完全独立的,必须能单独运行。这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作。通常通过setUp()和setDown()方法处理;
- 编写执行快速的测试代码。在某些情况下,测试需要加载复杂的数据结构,而且每次执行的时候都要重新加载,这个时候测试执行会很慢。因此,在这种情况下,可以将这种测试放置一个后台的任务中。
- 采用测试工具并且学着怎么使用它。
- 在编写代码前执行完整的测试,而且在编写代码后再重新执行一次。这样能保证你后来编写的代码不会破坏任何事情;
- 在提交代码前执行完整的测试;
- 如果在开发期间被打断了工作,写一个打断的单元测试,关于你下一步将要开发的。当你回来工作时,你能知道上一步开发到的指针;
- 单元测试函数使用长的而且具有描述性的名字。在正式执行代码中,可能使用square()或sqr()取名,但是在测试函数中,你必须取像test_square_of_number_2()、test_square_negativer_number()这些名字,这些名字描述更加清楚;
- 测试代码必须具有可读性;
- 单元测试对新进的开发人员来说是工作指南。
二、常见的测试框架
2.1 Unittest
unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。
通过继承unittest.TestCase来创建一个测试用例。
具体请参考 文档 。
举个例:
import unittest def fun(x):
return x + 1 class MyTest(unittest.TestCase):
def test(self):
self.assertEqual(fun(3), 4)
执行后成功。
但是,如果将期望的结果改成5,则执行的结果如下图所示:

2.2 Doctest
doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。
举个例子:
def square(x):
"""Squares x. >>> square(2)
4
>>> square(-2)
4
>>> square(5)
25
""" return x * x if __name__ == '__main__':
import doctest
doctest.testmod()
当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果如下:

但是,如果我们把结果改一下,square(2)的结果改成5,测试代码如下:
def square(x):
"""Squares x. >>> square(2)
5
>>> square(-2)
4
>>> square(5)
25
""" return x * x if __name__ == '__main__':
import doctest
doctest.testmod()
执行的测试结果如下所示:

2.3 py.test
py.test是unittest的替代工具。
尽管它是一个功能丰富、灵活的测试框架,但是它的语法很简单。创建一个单元测试就像编写一个模块一样。相比unittest,实现相同的测试功能,py.test做的事情更少。
py.test详细 文档 。
首先,安装py.test
pip install pytest
第二步,编写测试代码
def func(x):
return x + 1 def test_answer():
assert func(3) == 5
第三步,执行测试代码。
- 找到pytest安装路径。
- 用其所在的解析器(python.exe)执行test.py ,执行命令比如:

执行的结果如下图所示:

2.4 Nose
Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。
nose的详细文档: https://nose.readthedocs.org/en/latest/
注意:nose本身是支持python3的,但是很多它的插件不支持。
2.5 tox
最大的特色,是自动最测试环境的管理以及使用多个解析器配置进行测试。
tox的详细文档: http://testrun.org/tox/latest/
2.6 Unittest2
是unitest的升级版。对API进行了改善以及更好的诊断语法。
unittest2的详细文档: https://pypi.python.org/pypi/unittest2
首先,安装
pip install unittest2
为了以后能在unittest与unittest2之间进行切换,最好的代码编写方式如下:
import unittest2 as unittest class MyTest(unittest.TestCase):
...
2.7 mock unittest.mock是用来测试python的库。在python3.3版本以后,这个是一个标准库。 对老版本来说,使用pip install mock 进行安装。
mock的精髓在于,你可以使用模拟的对象来替代你的系统的一部分,然后验证后续的执行是否正确。
mock的详细文档:http://www.voidspace.org.uk/python/mock/
python 几种常用测试框架的更多相关文章
- Python几种常用的测试框架
一.测试的常用规则 一个测试单元必须关注一个很小的功能函数,证明它是正确的: 每个测试单元必须是完全独立的,必须能单独运行.这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作.通常通过 ...
- Python 下的unittest测试框架
unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例 ...
- python之robotframework+ride测试框架
一.robotframework简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式 ...
- python之robotframework+pycharm测试框架
一.robotframework简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式 ...
- Python&Selenium 关键字驱动测试框架之数据文件解析
摘要:在关键字驱动测试框架中,除了PO模式以及一些常规Action的封装外,一个很重要的内容就是读写EXCEL,在团队中如何让不会写代码的人也可以进行自动化测试? 我们可以将自动化测试用例按一定的规格 ...
- python开发中常用的框架
以下是15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Django 应该是最出名的 ...
- python 77种常用的基础函数
Python: 1. print()函数:打印字符串 2. raw_input()函数:从用户键盘捕获字符 3. len()函数:计算字符长度 4. format(12.3654,’ ...
- python主流测试框架的简介
1.python自动化的一些测试框架 1).unitest(也称为PyUnit) 地址:https://docs.python.org/2/library/unittest.html 2).Nose ...
- 【pytest系列】- pytest测试框架介绍与运行
如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html 前言 目前有两种纯测试的测 ...
随机推荐
- STM32的PWM输入模式设置并用DMA接收数据
参考 :STM32输入捕获模式设置并用DMA接收数据 PWM input mode This mode is a particular case of input capture mode. The ...
- 设计模式之命令模式(Command)
from::http://www.cnblogs.com/itTeacher/archive/2012/12/04/2801322.html 命令模式将一个请求封装为一个对象,从而使你可用不同的请求对 ...
- C++关键字之virtual
from://http://blog.csdn.net/xuyuanfan/article/details/9935533 在C++中是没有接口的,要真正实现java中的interface功能,需要使 ...
- 识骨寻踪第十二季/全集Bones迅雷下载
本季 Bones (2015)看点:<识骨寻踪>(FOX)2005年推出的罪案题材的电视连续剧.该剧部分内容改编自前刑侦检验官.现任该剧制作人凯丝·莱克斯出版的一系列侦探小说.Bones的 ...
- Library drmframework_jni not found
http://piotrbuda.eu/2012/06/trying-to-solve-error-491-in-play-store-on-android-emulator.html http:// ...
- 详细解读DiskLruCache
DiskLruCache这个类我记忆中是来自Google的一个开源项目,叫做BitmapFun,目的是更方便的加载bitmap.项目的源码:https://developer.android.com/ ...
- js混淆代码还原-js反混淆:利用js进行赋值实现
js混淆代码还原-js反混淆:利用js进行赋值实现 [不想用工具的直接看方法二] 本文地址:http://www.cnblogs.com/vnii/archive/2011/12/14/22875 ...
- Visual Studio Code compile error - launch.json must be configured...
一.在最初使用VS Code创建控制台应用时, 使用VS Code调试工具默认会跑出异常: launch: program 'launch: launch.json must be configure ...
- MongoDB单机, 主从, 分布式部署
MongoDB是最易用的NoSQL,比较适合取代MySQL做一些存储,不过不是强一致性的.本文介绍一下MongoDB各种部署方式,并分享一些感受.前两部分“单机部署”和“主从部署”是“分片部署”的基础 ...
- sublime3 安装 Package Control 报错 “There Are No Packages Available For Installation”
编辑Preferences > Package Settings > Package Control > Settings - User文件 码上 { "channels& ...