聲明:
本博客歡迎轉(zhuǎn)發(fā),但請(qǐng)保留原作者信息 !
博客地址: http://blog.csdn.net/halcyonbaby
內(nèi)容系本人學(xué)習(xí)、研究和總結(jié),如有雷同,實(shí)屬榮幸!
組件一覽
-
hacking
一組flake8插件,用于靜態(tài)檢查。
https://pypi.python.org/pypi/hacking -
coverage
衡量python代碼覆蓋率的工具。能夠單獨(dú)執(zhí)行/API方式或者以nose插件方式執(zhí)行“nosetests --with-coverage”。
https://nose.readthedocs.org/en/latest/plugins/cover.html
-
discover
測(cè)試用例發(fā)現(xiàn)。(2.7已經(jīng)包括在unittest中,2.4須要backport) 主要在run_test.sh下使用。
https://pypi.python.org/pypi/discover/0.4.0
-
feedparser
使用python進(jìn)行parse RSS訂閱內(nèi)容主要在version API的測(cè)試中使用(versionAPI支持atom格式返回信息) -
MySQL-python
mysql接口的python實(shí)現(xiàn) -
psycopg2
postgresql接口的python實(shí)現(xiàn) -
pylint
對(duì)python進(jìn)行靜態(tài)分析、檢查的工具 -
python-subunit
subunit是測(cè)試結(jié)果的流協(xié)議。python-subunit是它的python實(shí)現(xiàn)。 -
sphinx
文檔生成工具(基于Restructed格式) -
oslosphinx
openstack對(duì)sphinx的擴(kuò)展 -
testrepository
測(cè)試結(jié)果的數(shù)據(jù)庫(kù)。主要在覆蓋率測(cè)試時(shí)使用。 -
mock
對(duì)所測(cè)試的函數(shù)的外部依賴函數(shù)進(jìn)行模擬替換。3.3以后已經(jīng)是python標(biāo)準(zhǔn)庫(kù)。mock的實(shí)現(xiàn)原理也非常easy,一般使用類似mokey patch的方式實(shí)現(xiàn)。
-
mox
基于java的easymock提供的python mock對(duì)象框架(基本上已經(jīng)停止維護(hù))
Mox的運(yùn)行流程:- Create mock (in record mode)
- Set up expectations
- Put mock into replay mode
- Run test
- Verify expected interactions with the mock occurredmox與mock功能類似,都是用來(lái)做函數(shù)或者類的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(對(duì)已有對(duì)象的某個(gè)方法進(jìn)行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
翻譯為“夾具”,顧名思義提供了狀態(tài)重用等的抽象機(jī)制。
---------------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())
-----------------執(zhí)行結(jié)果------------------------
[root@centoo65 data]# python myfixtures.py
True
-----------經(jīng)常使用fixture-------------------------
>>> import fixtures
>>> a = fixtures.TempDir()
>>> a.setUp()
>>> print a.path
/tmp/tmpWB8EmF
>>> quit()
----------------------------------------------
其它參見(jiàn)PolicyFixture
-
testtools
對(duì)python標(biāo)準(zhǔn)單元測(cè)試框架的擴(kuò)展。為什么使用?- 更好的斷言 比方支持assertThat擴(kuò)展
- 更具體的debug信息 比方支持addDetails的信息
-
擴(kuò)展的同一時(shí)候保持兼容性
- python多版本號(hào)的兼容性
-
tox
通用的虛擬環(huán)境管理和測(cè)試命令行工具。
配置能夠看project下的tox.ini文件。tox.ini能夠通過(guò)tox-quickstart生成。
命令運(yùn)行,如:“tox -e py26", "tox -e pep8"
運(yùn)行單元測(cè)試的時(shí)候,順便生成單元測(cè)試報(bào)告,并檢查測(cè)試覆蓋率,并生成覆蓋率報(bào)告。直接運(yùn)行tox是不行的,僅僅能進(jìn)行單元測(cè)試,須要給tox添加?擴(kuò)展參數(shù),例如以下:tox -- --cover-erase -- --with-coverage -- --cover-html
類說(shuō)明
頂級(jí)文件夾test.py中:
test.TestCase繼承于testtools.TestCase。
test.NoDBTestCase繼承于test.TestCase。
test.TestCase中大量使用了fixture對(duì)環(huán)境進(jìn)行初始化。(比方DB,Policy等)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
