一、Openstack 的单元测试工具介绍

1.unittest

unittest: 是 Python 的标准库,提供了最基本的单元测试功能,包括 单元测试运行器(简称runner) 和 单元测试框架。项目的单元测试代码的测试类可以继承 unittest.TestCase 类,那么这个类就能够被 runner 发现并且执行。同时, unittest.TestCase 这个类还定义了 setUp() , tearDown() , setUpClass() 和 tearDownClass() 方法,是用来运行 单元测试前的设置工作代码 和 单元测试后的清理工作代码,可以使用 $ python -m unittest test_module 的命令来执行某个模块的单元测试。

2.mock

mock: 用来模拟对象的行为,这样在进行单元测试的时候,可以指定任何对象的返回值,便于测试对外部接口有依赖的代码(导入型代码)。

3.testtools

testtools: 是个 unittest 的扩展框架,主要是在 unittest 的基础上提供了更好的 assert 功能,使得写单元测试更加方便。

4.fixtures

fixtures: 的意思是固定装置,在 Python 的单元测试中,是指某段可以复用的单元测试 setUp() 和 tearDown() 代码组合。一个 fixture 一般用来实现某个组件的 setUp() 和 tearDown() 逻辑,比如: 测试前要先创建好某些数据,测试后要删掉这些数据,这些操作就可以封装到一个 fixture 中。这样不同的测试用例就不用重复写这些代码,只要使用 fixture 即可。fixtures 模块是一个第三方模块,提供了一种简单的创建 fixture 类和对象的机制,并且也提供了一些内置的 fixture。

5.testscenarios

testscenarios: 模块满足了场景测试的需求。它的基本用法是在测试类中添加一个类属性 scenarios ,该属性是一个元组,定义了每一种不同的场景下都会不同的变量值。比如说你测试一段数据访问代码,你需要测试该代码在使用不同的驱动时(MongoDB/MySQL/File)是否都能正常工作。最好的办法就是使用 testscenarios 模块,定义好会应场景而改变的 scenarios 变量,然后实现一个测试用例方法。testscenarios 模块在 OpenStack Ceilometer 中被大量使用。

6.subunit

subunit: 是一个用于传输单元测试结果的流协议。一般来说,运行单元测试的时候是把单元测试的结果直接输出到标准输出,但是如果运行大量的测试用例时,这些大量的测试结果将难以被分析。因此使用 python-subunit 模块来运行测试用例,并且把测试结果通过 subunit 协议输出,这样测试结果就可以被分析工具聚合并且分析。python-subunit 模块也自带了一些分析工具用来解析 subunit 协议,比如:$ python -m subunit.run test_module | subunit2pyunit , subunit2pyunit 指令会解析 subunit 协议,并且将结果输出到标准输出。

7.testrepository

testrepository: 用于管理单元测试用例, 当一个项目中的测试用例很多时,如何更有效的处理单元测试用例的结果就变得很重要。testrepository 会使用 python-subunit 模块来运行测试用例,然后分析 subunit 协议的输出并将测试结果记录到本地文件. testrepository 能够让你:
        知道哪些用例运行时间最长
        显示运行失败的用例
        重新运行上次运行失败的用例

8.coverage

coverage: 是用来计算代码运行时的覆盖率的,也就是统计多少代码被执行了。它可以和testrepository一起使用,用来统计单元测试的覆盖率,在运行完单元测试之后,输出覆盖率报告。

9.tox

tox: 是用来管理和构建虚拟环境(virtualenv)的。对于一个项目,我们需要运行Python 2.7的单元测试,也需要运行Python 3.4的单元测试,还需要运行PEP8的代码检查。这些不同的任务需要依赖不同的库,所以需要使用不同的虚拟环境。使用tox的时候,我们会在tox的配置文件 tox.ini 中指定不同任务的虚拟环境名称,该任务在虚拟环境中需要安装哪些包,以及该任务执行的时候需要运行哪些命令。

一般 openstack 项目中的 tox 的功能包含了: 打源码包(sdist)、单元测试(UT)、测试覆盖率(coverage)、代码格式检查(pep8,flake) 等功能.

tox 能够让我们在同一个 Host 上自定义出多套相互独立且隔离的 Python 环境, 所套虚拟环境中可能使用了不同的 Python 拦截器/环境变量设置/第三方依赖包/… 所以 tox 最典型的应用就是用于测试 Python 程序的兼容性了.

二、单元测试工具使用流程

1.首先使用 unittest, mock, testtools, fixtures, testscenarios 等工具和模块来编写单元测试用例
2. 然后使用 tox 来管理单元测试运行时的虚拟环境
3.tox 再调用 testrepository 来管理这些测试用例
4.其中 testrepository 会调用 subunit 来执行测试用例, 并且一同聚合和分析测试结果
5.然后 testrepository 调用 coverage 来执行代码覆盖率的计算
当我们执行 tox -e py27 时就是开始项目的单元测试, tox 首先会读取项目根目录下的 tox.ini 文件(/opt/stack/keystone/tox.ini ), 然后根据该文件来构建出相应的虚拟环境, 并将该虚拟环境保存在 .tox/ 目录下(以环境的名称来命名).

fanguiju@fanguiju:/opt/stack/keystone/.tox$ ls
log pep8 py27

除了 log 之外的 py27/pep8 都是 virtualenv 环境.

Openstack单元测试工具简单说明的更多相关文章

  1. OpenStack基础知识-单元测试工具介绍

    针对以前学的内容的一个简单整理 1.单元测试工具介绍 unittest: 是 Python 的标准库,提供了最基本的单元测试功能,包括 单元测试运行器(简称runner) 和 单元测试框架.项目的单元 ...

  2. OpenStack 单元测试

    OpenStack 单元测试 OpenStack开发——单元测试 本文将介绍OpenStack单元测试的部分.本文将重点讲述Python和OpenStack中的单元测试的生态环境. openstack ...

  3. Openstack_单元测试工具 tox

    目录 目录 扩展阅读 Openstack 的单元测试工具 单元测试工具使用流程 tox toxini 参考文章 扩展阅读 Python Mock的入门 Openstack 的单元测试工具 unitte ...

  4. 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

  5. OpenStack部署工具总结

    目前感觉比较简单直观的部署工具有RDO.devstack.Fuel等: 1. RDO https://openstack.redhat.com/Quickstart REDHAT出品,支持Redhat ...

  6. 单元测试工具之Xunit

    在.NET开发中的单元测试工具之——xUnit.Net  原始出处 http://zhoufoxcn.blog.51cto.com/792419/1172320 在上一篇<在.NET开发中的单元 ...

  7. Openstack部署工具

    Openstack发展很猛,很多朋友都很认同,2013年,会很好的解决OpenStack部署的问题,让安装,配置变得更加简单易用. 很多公司都投入人力去做这个,新浪也计划做一个Openstack的is ...

  8. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

  9. Web Service单元测试工具实例介绍之SoapUI

    原文  Web Service单元测试工具实例介绍之SoapUI SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式.能够快速构建项目和组 ...

随机推荐

  1. MODULE_DEVICE_TABLE 的作用

    pci_device_id,PCI设备类型的标识符.在include/linux/mod_devicetable.h头文件中定义.struct pci_device_id {        __u32 ...

  2. 学以致用十八-----shell脚本之基础概念及变量

    1.脚本脚本,说了很多年的脚本,一直都没怎么弄明白为什么叫脚本,还仅仅是script翻译过来的?今天再查看翻译,查阅了资料,对脚本有了个新的认识. script也叫剧本,脚本---剧本,像剧本一样,让 ...

  3. reload maven project' has encountered a proble" 问题

    由于重重原因,我取消maven的下载(可能是jar包没有公服镜像).导致重新打开sts 时发生异常. 在网上寻找到资料,发现需要删除${workspace}\.metadata\.plugins\or ...

  4. Forward团队-爬虫豆瓣top250项目-代码设计规范

    组长地址:http://www.cnblogs.com/mazhuangmz/p/7603641.html 成员:马壮,李志宇,刘子轩,年光宇,邢云淇,张良 1.缩进采用一个Tab键 2.大括号:如: ...

  5. java基础-day33

    第10天 Transaction事务 今日内容介绍 u 事务管理 u 转账案例 u 事务总结 第1章   事务管理 1.1  事务概述 l  事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全都 ...

  6. 学习protobuf 感想

    前俩篇博文是从大牛的博客抄过来的, 写的都很好. 这里还写简单写下自己的感想: 1. 和json比, protobuff编码后的体积小很多, 这是肯定的. 都源自于protobuff内部的一系列特殊的 ...

  7. codeforces 925 c big secret

    题意: 给你n个数,b[1],b[2],b[3].......,让你重新排列,使a[i]的值递增 a[i]和b的关系: a[i] = b[1]^b[2]^b[3]^....^b[i]; 首先说异或   ...

  8. [au3]复制选择性粘贴文本到excel

    案例:在一张网页上有许多你要复制的内容,但是你必须一个一个找到他们,然后一个一个复制出来粘贴到excel表格里.时间一长你的眼睛容易花,而且复制多了容易出错. 方法:当然有许多方法可以自动化的做这一件 ...

  9. python函数知识

    一.三目运算 也叫三元运算,例如result=x if x<y else y 二.集合(set) 返回主页集合(set):把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(s ...

  10. Tomcat数据源配置方法总结

    最近接触的数据表管理项目,涉及到了数据源配置,所以整理了一下配置方法: JNDI数据源统一都是在Tomcat下server.xml中配置的,根据应用范围的差别又分为一下几种方式: 第一种:配置单个应用 ...