声明:

本博客欢迎转发,但请保留原作者信息!

博客地址: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单元測试用组件一览的更多相关文章

  1. 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例

    第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...

  2. php单元測试

    你是否在程序开发的过程中遇到下面的情况:当你花了非常长的时间开发一个应用后,你觉得应该是大功告成了,可惜在调试的时候,老是不断的发现bug,并且最可怕的是,这些bug是反复出现的,你可能发现这些bug ...

  3. junit4单元測试总结

    junit4单元測试总结 本文开发环境为myeclipse10.7 1.  准备工作 1.1. 选择须要单元測试的文件 创建mavenproject.右击须要单元測试的文件,选择New->oth ...

  4. OpenStack中给wsgi程序写单元測试的方法

    在 OpenStack 中, 针对web应用, 有三种方法来写单元測试 1) 使用webob生成模拟的request from __future__ import print_function imp ...

  5. Java单元測试工具JUnit 5新特性一览

    Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...

  6. Android单元測试之JUnit

    随着近期几年測试方面的工作慢慢火热起来.常常看见有招聘測试project师的招聘信息.在Java中有单元測试这么一个JUnit 方式,Android眼下主要编写的语言是Java,所以在Android开 ...

  7. 在Eclipse中使用JUnit4进行单元測试(0基础篇)

    本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...

  8. C语言单元測试

    C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...

  9. Android 进行单元測试难在哪-part3

    原文链接 : HOW TO MAKE OUR ANDROID APPS UNIT TESTABLE (PT. 1) 原文作者 : Matthew Dupree 译文出自 : 开发技术前线 www.de ...

随机推荐

  1. fastUtils学习

    比传统java集合工具类速度更快 google的guava也新增了java容器新的功能,功能更加强大,参考文档:http://www.ibm.com/developerworks/cn/java/j- ...

  2. php按址传递bug

    foreach ($product_info as $key=>&$value){            $value['bookCity'][]=array(              ...

  3. jquery ajax 跨域处理

    今天使用JQuery Ajax 在本地电脑获取远程服务器数据的时候,发现使用$.ajax,$.getJSON,$.get这些都没有反应,后来再统一个网站下测试了一下,代码写得没有问题.后来想了想好想, ...

  4. expected function body after function declarator

    我出现这个错误是在pch中添加了一个a.h文件 然后在其他文件的b.h文件中就出现这个错误.. 后来排查出原因是: 在pch中, 这个a.h文件在b.h文件之后, 所以在b.h中使用的时候就会报错

  5. php中函数不确定参数个数时获取所有参数

    func_get_arg(),func_get_args()和func_num_args()的用法 这三个函数呢,都是以func_打头的,顾名思义,是跟php的函数有关的.我们在写类的时候也经常用到这 ...

  6. JavaWeb 之 重复提交表单和验证码相关的问题!

    下面我们首先来说一下表单的重复提交问题,我们知道在真实的网络环境中可能受网速带宽的原因会造成页面中表单在提交的过程中出现网络的延迟等问题,从而造成多次提交的问题!下面我们就具体来分析一下造成表单提交的 ...

  7. C++中基类对象的引用

    代码: #include <iostream> #include <cstdio> using namespace std; class A{ public: void pri ...

  8. C++拾遗(十二)C++代码重用

    “has-a”关系 通常有两种方法实现: 1.被包含,本身是另一个类的对象. 2.私有或者保护继承. 主要讨论第二种方法,在继承时使用private关键字(或者不用任何关键字,默认就是私有的). 使用 ...

  9. X-Y Problem

    X-Y Problem 对于X-Y Problem的意思如下: 1)有人想解决问题X2)他觉得Y可能是解决X问题的方法3)但是他不知道Y应该怎么做4)于是他去问别人Y应该怎么做? 简而言之,没有去问怎 ...

  10. 若后台的Activity被系统回收...

    你后台的Activity被系统回收怎么办?如果后台的Activity由于某种原因被系统回收了,如何在被系统回收之前保存当前状态? 除了在栈顶的Activity,其他的Activity都有可能在内存不足 ...