针对之前学的内容的一个简单整理python
一、单元测试工具介绍 unittest: 是 Python 的标准库,提供了最基本的单元测试功能,包括 单元测试运行器(简称runner) 和 单元测试框架。项目的单元测试代码的测试类能够继承 unittest.TestCase 类,那么这个类就可以被 runner 发现而且执行。同时, unittest.TestCase 这个类还定义了 setUp() , tearDown() , setUpClass() 和 tearDownClass() 方法,是用来运行 单元测试前的设置工做代码 和 单元测试后的清理工做代码,可使用 $ python -m unittest test_module 的命令来执行某个模块的单元测试。ios
mock: 用来模拟对象的行为,这样在进行单元测试的时候,能够指定任何对象的返回值,便于测试对外部接口有依赖的代码(导入型代码)。框架
testtools: 是个 unittest 的扩展框架,主要是在 unittest 的基础上提供了更好的 assert 功能,使得写单元测试更加方便。工具
fixtures: 的意思是固定装置,在 Python 的单元测试中,是指某段能够复用的单元测试 setUp() 和 tearDown() 代码组合。一个 fixture 通常用来实现某个组件的 setUp() 和 tearDown() 逻辑,好比: 测试前要先建立好某些数据,测试后要删掉这些数据,这些操做就能够封装到一个 fixture 中。这样不一样的测试用例就不用重复写这些代码,只要使用 fixture 便可。fixtures 模块是一个第三方模块,提供了一种简单的建立 fixture 类和对象的机制,而且也提供了一些内置的 fixture。单元测试
testscenarios: 模块知足了场景测试的需求。它的基本用法是在测试类中添加一个类属性 scenarios ,该属性是一个元组,定义了每一种不一样的场景下都会不一样的变量值。好比说你测试一段数据访问代码,你须要测试该代码在使用不一样的驱动时(MongoDB/MySQL/File)是否都能正常工做。最好的办法就是使用 testscenarios 模块,定义好会应场景而改变的scenarios 变量,而后实现一个测试用例方法。testscenarios 模块在 OpenStack Ceilometer 中被大量使用。测试
subunit: 是一个用于传输单元测试结果的流协议。通常来讲,运行单元测试的时候是把单元测试的结果直接输出到标准输出,可是若是运行大量的测试用例时,这些大量的测试结果将难以被分析。所以使用 python-subunit 模块来运行测试用例,而且把测试结果经过 subunit 协议输出,这样测试结果就能够被分析工具聚合而且分析。python-subunit 模块也自带了一些分析工具用来解析 subunit 协议,好比:$ python -m subunit.run test_module | subunit2pyunit , subunit2pyunit 指令会解析 subunit 协议,而且将结果输出到标准输出。对象
testrepository: 用于管理单元测试用例, 当一个项目中的测试用例不少时,如何更有效的处理单元测试用例的结果就变得很重要。testrepository 会使用 python-subunit 模块来运行测试用例,而后分析 subunit 协议的输出并将测试结果记录到本地文件. testrepository 可以让你:一、知道哪些用例运行时间最长 二、显示运行失败的用例 三、从新运行上次运行失败的用例继承
coverage: 是用来计算代码运行时的覆盖率的,也就是统计多少代码被执行了。它能够和testrepository一块儿使用,用来统计单元测试的覆盖率,在运行完单元测试以后,输出覆盖率报告。接口
tox: tox是用来管理和构建虚拟环境(virtualenv)的。对于一个项目,咱们须要运行Python 2.7的单元测试,也须要运行Python 3.4的单元测试,还须要运行PEP8的代码检查。这些不一样的任务须要依赖不一样的库,因此须要使用不一样的虚拟环境。使用tox的时候,咱们会在tox的配置文件 tox.ini 中指定不一样任务的虚拟环境名称,该任务在虚拟环境中须要安装哪些包,以及该任务执行的时候须要运行哪些命令it
二、单元测试工具使用流程 首先使用 unittest, mock, testtools, fixtures, testscenarios 等工具和模块来编写单元测试用例,而后使用 tox 来管理单元测试运行时的虚拟环境,tox 再调用 testrepository 来管理这些测试用例,其中 testrepository 会调用 subunit 来执行测试用例, 而且一同聚合和分析测试结果,最后testrepository 调用 coverage 来执行代码覆盖率的计算