openstack单元測试用组件一览

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等)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118807.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MYSQL分布式集群使用-主主复制「建议收藏」

    MYSQL分布式集群使用-主主复制

    2022年2月13日
    42
  • 六、小程序|App抓包-移动端抓包app-抓包「建议收藏」

    六、小程序|App抓包-移动端抓包app-抓包「建议收藏」小程序|App抓包移动端抓包app-抓包 ———-IOS设备系统———一、IOS抓包IOS(thor+anubis)app应用市场下载即可:首次安装需要配置证书:抓包:简单测试抓取部分数据包:查看详细数据包内容:点击数据包查看详情:一直摁着,选择重放可进行重放测试thor跳转anubisanubis相关功能点和界面:重放记录:可修改重放:也可进行其他的导出操作:可以将数据包导出联合burp重放———-Android设备系统———二、android移动

    2022年5月27日
    40
  • 单目视觉定位测距的两种方式[通俗易懂]

    单目视觉定位测距的两种方式[通俗易懂]单目定位和双目定位的选择,我觉得主要还是成本和时间的考虑。之前也尝试过双目定位,感觉要更精准些,但双目测距需要对两幅图像进行图像变换和极线匹配,稍微耗时了一些。这几天尝试了一下单摄像头进行测距定位,主要有两个思路:  1.定位测量插值得到每个像素的实际坐标    该方法总觉得有很大的问题:一个是摄像头安装后就必须固定不动,稍微的旋转都会导致之间测量的像素点对应的坐标偏移。另一个是人工测量的

    2022年6月15日
    134
  • flowable流程详解

    flowable流程详解flowable图例解释请假流程bpmn20.xml文件请假流程示例图例解释开始事件:图中用细线圆圈来表示,是流程实例的开始点箭头:表示节点之间的流转指向。用户任务:在图中用左上角有人的圆角矩形表示,这些是需要用户来操作的节点。图中有两个,第一个表示需要经理进行审批来同意或拒绝,第二个表示用户来确认销假。排它网关:用叉形符号填充的菱形表示,从该图中出来的箭头往往有多个,但只有一个满足条件,流程会沿着满足条件的方向流转。自动化任务:左上角有齿轮形状的的圆角矩形,表示自动执行的节点。图中

    2022年5月11日
    316
  • pycharm中使用anaconda部署python环境_pycharm怎么用anaconda的环境

    pycharm中使用anaconda部署python环境_pycharm怎么用anaconda的环境每一种语言的开发环境都是包含了运行环境和开源包两个核心内容。比如Java,JDK是运行环境,而开发导入需要用到的各种第三方工具都是以开源包的形式导入的。再比如Python,python3.6/python2.7是它的运行环境,而pynum,pandas这些数据处理工具就是也是开源包。通常情况下,我们都是使用IDE在项目中统一管理运行环境和开源包。比如开发JavaWeb项目我们使用Myec…

    2022年8月27日
    4
  • Oracle用户密码修改_oracle数据库用户加密显示

    Oracle用户密码修改_oracle数据库用户加密显示oracle基本操作descall_tables;–查看表结构selectfromall_tables;–查看当前数据库所有的表selecttable_namefromuser_tables;查看当前登录的用户的表:selectfromdba_users;查看有哪些用户修改密码过期策略1.查看用户存放密码策略的proifle:SELECTUSERNAME,PROFILEF…

    2022年7月28日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号