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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 全栈JavaScript之路(十八)HTML5 自己定义数据属性「建议收藏」

    全栈JavaScript之路(十八)HTML5 自己定义数据属性

  • tcp/ip网络通讯安全加密方法[通俗易懂]

    tcp/ip网络通讯安全加密方法[通俗易懂]tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等。但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的加密算法那就更加不可取;其实通过一些现有的加密的技术应用完全可以实现即简单又安全的网络通讯程序。首先保证网络通讯安全有两个方面,第一保证连接的有效性,其二就…

  • a算法解决八数码实验报告_人工智能核心算法

    a算法解决八数码实验报告_人工智能核心算法实验一A*算法求解8数码问题一、实验目的熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。二、实验原理A*算法是一种启发式图搜索算法,其特点在于对估价函数的定义上。对于一般的启发式图搜索,总是选择估价函数f值最小的节点作为扩展节点。因此,f是根据需要找到一条最小代价路径的观点来估算节点的,所以,可考虑每个节点n的估价函数值为两个分量:从起始节点到节点n的实际代价g(n)以及从节点n到达目标节点的估价代价h(n),且hn≤h*n,h*n

    2022年10月30日
  • 2020年读书随笔一篇_2020年教师读书笔记

    2020年读书随笔一篇_2020年教师读书笔记Note:以下markdown格式文本由json2md自动转换生成,可参考JSON转Markdown:我把阅读数据从MongoDB中导出转换为.md了了解具体的转换过程。面纱作者:毛姆[英]ISBN:9787210082835出版社:江西人民出版社出版日期:2016-04-01图书标签:毛姆,小说,英国文学,英国,外国文学豆瓣地址:https://book.douban.com/subject/26757680/阅读日期:2020-01-19读书笔记威廉·萨默塞特·毛姆(

  • List转Set[通俗易懂]

    List转Set[通俗易懂]List转SetList<String>myList=newArrayList()<String>;myList.add(“1”);myList.add(“1”);Setresult=newHashSet(myList);Set转ListString[]str=newString[]{“Tom”,”Bob”,”Jane”};…

  • pycharm下载pandas包失败_pycharm下载包很慢

    pycharm下载pandas包失败_pycharm下载包很慢Pycharm使用安装各种包下载速度慢问题快捷键安装各种包python3-mpipinstallnumpy控制台用这段代码,所有包应该都可以下载下载速度慢问题pip下载速度一般几十k,下着下着就超时了,我用这个大佬的方法解决了MAC下的这个问题MAC解决pip3下载速度慢的问题快捷键最后记录一些经常用的MACPycharm快捷键,方便使用option+commend+L代码格式化control+r运行commend+backspace删除光标所在行

发表回复

您的电子邮箱地址不会被公开。

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