openstack单元測试用组件一览
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
内容系本人学习、研究和总结,如有雷同,实属荣幸!
组件一览
- hacking
一组flake8插件,用于静态检查。
https://pypi.python.org/pypi/hacking - coverage
衡量python代码覆盖率的工具。能够单独执行/API方式或者以nose插件方式执行“nosetests --with-coverage”。
https://nose.readthedocs.org/en/latest/plugins/cover.html - discover
測试用例发现。(2.7已经包括在unittest中,2.4须要backport) 主要在run_test.sh下使用。
https://pypi.python.org/pypi/discover/0.4.0 - feedparser
使用python进行parse RSS订阅内容主要在version API的測试中使用(versionAPI支持atom格式返回信息) - MySQL-python
mysql接口的python实现 - psycopg2
postgresql接口的python实现 - pylint
对python进行静态分析、检查的工具 - python-subunit
subunit是測试结果的流协议。python-subunit是它的python实现。 - sphinx
文档生成工具(基于Restructed格式) - oslosphinx
openstack对sphinx的扩展 - testrepository
測试结果的数据库。主要在覆盖率測试时使用。 - mock
对所測试的函数的外部依赖函数进行模拟替换。3.3以后已经是python标准库。mock的实现原理也非常easy,一般使用类似mokey patch的方式实现。 - mox
基于java的easymock提供的python mock对象框架(基本上已经停止维护)
Mox的运行流程:- Create mock (in record mode)
- Set up expectations
- Put mock into replay mode
- Run test
- Verify expected interactions with the mock occurredmox与mock功能类似,都是用来做函数或者类的mock。
Mock方法和属性:
>>> # Mock
>>> my_mock = mock.Mock()
>>> my_mock.some_method.return_value = "calculated value"
>>> my_mock.some_attribute = "value"
>>> assertEqual("calculated value", my_mock.some_method())
>>> assertEqual("value", my_mock.some_attribute)
>>> # Mox
>>> my_mock = mox.MockAnything()
>>> my_mock.some_method().AndReturn("calculated value")
'calculated value'
>>> my_mock.some_attribute = "value"
>>> mox.Replay(my_mock)
>>> assertEqual("calculated value", my_mock.some_method())
>>> assertEqual("value", my_mock.some_attribute)
部分mock(对已有对象的某个方法进行mock):
>>> # Mock
>>> SomeObject.some_method = mock.Mock(return_value='value')
>>> assertEqual("value", SomeObject.some_method())
>>> # Mox
>>> my_mock = mox.MockObject(SomeObject)
>>> my_mock.some_method().AndReturn("value")
'value'
>>> mox.Replay(my_mock)
>>> assertEqual("value", my_mock.some_method())
>>> mox.Verify(my_mock)
抛出异常:
>>> # Mock
>>> my_mock = mock.Mock()
>>> my_mock.some_method.side_effect = SomeException("message")
>>> assertRaises(SomeException, my_mock.some_method)
>>> # Mox
>>> my_mock = mox.MockAnything()
>>> my_mock.some_method().AndRaise(SomeException("message"))
>>> mox.Replay(my_mock)
>>> assertRaises(SomeException, my_mock.some_method)
>>> mox.Verify(my_mock)
- fixtures
翻译为“夹具”,顾名思义提供了状态重用等的抽象机制。
---------------myfixture.py-----------------------
import testtools
import unittest
import fixtures
class NoddyFixture(fixtures.Fixture):
def setUp(self):
super(NoddyFixture, self).setUp()
self.frobnozzle = 42
self.addCleanup(delattr, self, 'frobnozzle')
class NoddyTest(testtools.TestCase, fixtures.TestWithFixtures):
def test_example(self):
fixture = self.useFixture(NoddyFixture())
self.assertEqual(42, fixture.frobnozzle)
result = unittest.TestResult()
_ = NoddyTest('test_example').run(result)
print (result.wasSuccessful())
-----------------执行结果------------------------
[root@centoo65 data]# python myfixtures.py
True
-----------经常使用fixture-------------------------
>>> import fixtures
>>> a = fixtures.TempDir()
>>> a.setUp()
>>> print a.path
/tmp/tmpWB8EmF
>>> quit()
----------------------------------------------
其它參见PolicyFixture
- testtools
对python标准单元測试框架的扩展。为什么使用?- 更好的断言 比方支持assertThat扩展
- 更具体的debug信息 比方支持addDetails的信息
- 扩展的同一时候保持兼容性
- python多版本号的兼容性
- tox
通用的虚拟环境管理和測试命令行工具。
配置能够看project下的tox.ini文件。tox.ini能够通过tox-quickstart生成。
命令运行,如:“tox -e py26", "tox -e pep8"
运行单元測试的时候,顺便生成单元測试报告,并检查測试覆盖率,并生成覆盖率报告。直接运行tox是不行的,仅仅能进行单元測试,须要给tox添加�扩展參数,例如以下:tox -- --cover-erase -- --with-coverage -- --cover-html
类说明
顶级文件夹test.py中:
test.TestCase继承于testtools.TestCase。
test.NoDBTestCase继承于test.TestCase。
test.TestCase中大量使用了fixture对环境进行初始化。(比方DB,Policy等)
openstack单元測试用组件一览的更多相关文章
- 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例
第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...
- php单元測试
你是否在程序开发的过程中遇到下面的情况:当你花了非常长的时间开发一个应用后,你觉得应该是大功告成了,可惜在调试的时候,老是不断的发现bug,并且最可怕的是,这些bug是反复出现的,你可能发现这些bug ...
- junit4单元測试总结
junit4单元測试总结 本文开发环境为myeclipse10.7 1. 准备工作 1.1. 选择须要单元測试的文件 创建mavenproject.右击须要单元測试的文件,选择New->oth ...
- OpenStack中给wsgi程序写单元測试的方法
在 OpenStack 中, 针对web应用, 有三种方法来写单元測试 1) 使用webob生成模拟的request from __future__ import print_function imp ...
- Java单元測试工具JUnit 5新特性一览
Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...
- Android单元測试之JUnit
随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...
- 在Eclipse中使用JUnit4进行单元測试(0基础篇)
本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...
- C语言单元測试
C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...
- Android 进行单元測试难在哪-part3
原文链接 : HOW TO MAKE OUR ANDROID APPS UNIT TESTABLE (PT. 1) 原文作者 : Matthew Dupree 译文出自 : 开发技术前线 www.de ...
随机推荐
- javascript基础之for循环
1.数组定义声名 var arry = [1,2,3,4,5] //相当与var arry = Array(1,2,3,4,5) 2.数据的增删改查 var arry = [1,2,3,4,5] ...
- VS2013默认快捷键
目录: Global 分析 调试器上下文菜单 体系结构 调试器上下文菜单 生成 诊断中心 类视图上下文菜单 Edit 调试 编辑器上下文菜单 文件 项目和解决方案上下文菜单 帮助 重构 负载测试 解决 ...
- Objective-C学习篇09—NSNumber与笑笑语法
NSNumber 由于数组,字典,集这三个容器中只能存放对象类型的数据,如果想把基本数据类型的数据存放到这三个容器中,需要把基本数据类型转化为对象类型,此时就要借助于NSNumber 这个类. NSN ...
- 自定义分页标签,并使分页标签能获得url中的参数
如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动带上url后面的参数 <tag> <description>分页标签</description&g ...
- C++ Primer 5th 第9章 顺序容器
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...
- 让你分分钟学会 JS 闭包
闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述 ...
- 自定义ORM框架(转转)
ORM背景 在数据库界,主流的数据库都是关系型数据库,其采用的关系型数据结构模型,无论从数学上还是实践中都相当的成熟,得到非常广泛的应用.在关系型数据结构理 论中,所有的数据都组织成一个个相互独立的二 ...
- php javascript
php100:103:Jquery javascript javascript:网页用来改进设计.验证表单.检测浏览器.创建cookies. Javascript(简称JS) 和 HTML 标签一样都 ...
- wordpress主题制作结构文件
下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用哪个模板文件呢?只有了解了以下主题层次结构,你才能知道你的WordPress主题到底需要写哪些文件 ...
- Android 解析JSON数组
1:服务端是使用PHP,从数据库中查询出一个二维数组,然后调用系统函数以json格式返回给客户端. 返回结果如下:http://192.168.0.116/server/selectTitle2jso ...