深度剖析Python測(cè)試框架內(nèi)容
下面進(jìn)行有效的說明一下Python測(cè)試框架,Python是一種解釋性的語言,但是這種說法是不正確的,其實(shí)他是一種可以讓沒有學(xué)習(xí)過編程或者并非計(jì)算機(jī)專業(yè)的編程學(xué)習(xí)的人,易于接受的語言。
Python測(cè)試框架中具有標(biāo)準(zhǔn)的單元測(cè)試框架(從 Python 2.3 開始。在 Python 2.2 中這只是可選模塊),與 Java jUnit 框架十分類似。測(cè)試用例的結(jié)構(gòu)與 jUnit 采用相同的方式。每一個(gè)待測(cè)試的類和模塊通常都具有自己的測(cè)試類。測(cè)試類中包含測(cè)試裝置(fixture)。
- import unittest
- from pprint import pprint
- import feedparser
- class FeedparserTest(unittest.TestCase):
- """
- A test class for the feedparser module.
- """
- def setUp(self):
- """
- set up data used in the tests.
- setUp is called before each test function execution.
- """
- self.developerWorksUrl = "testData/developerworks.rss"
- def testParse09Rss(self):
- """
- Test a successful run of the parse function for a
- 0.91 RSS feed.
- """
- print "FeedparserTest.testParse09RSS()"
- result = feedparser.parse(self.developerWorksUrl)
- pprint(result)
- self.assertEqual(0, result['bozo'])
- self.assert_(result is not None)
- channel = result['channel']
- self.assert_(channel is not None)
- chanDesc = channel['description']
- self.assertEqual(u'The latest content from IBM developerWorks',
- chanDesc)
- items = result['items']
- self.assert_(items is not None)
- self.assert_(len(items)> 3)
- firstItem = items[0]
- title = firstItem['title']
- self.assertEqual(u'Build installation packages with
- solution installation and deployment technologies',
- title)
- def tearDown(self):
- """
- tear down any data used in tests
- tearDown is called after each test function execution.
- """
- pass
- if __name__ == '__main__':
- unittest.main()
它們?cè)?setUp 函數(shù)中初始化。每一個(gè)測(cè)試都編寫為測(cè)試類中的一個(gè)獨(dú)立的測(cè)試函數(shù)。unittest 框架會(huì)在測(cè)試函數(shù)之間循環(huán)往復(fù),先調(diào)用 setUp 、再測(cè)試函數(shù)、然后清除( tearDown )測(cè)試函數(shù)。上述清單是實(shí)現(xiàn) feedparser 模塊基本測(cè)試功能的測(cè)試類。完整的測(cè)試類見 feedParserTest 項(xiàng)目下的 src/feedparserTest/FeedparserTest.py。
setUp 函數(shù)負(fù)責(zé)準(zhǔn)備整個(gè)測(cè)試過程中需要使用的測(cè)試裝置,在本例中只有測(cè)試用的 RSS 文件的目錄,測(cè)試函數(shù)將對(duì)其進(jìn)行解析。 testParse09Rss 是真正的測(cè)試函數(shù)。這個(gè)函數(shù)調(diào)用 feedparser.parse 函數(shù),傳遞測(cè)試用的 RSS 文件,輸出解析結(jié)果。
并通過 TestCase 類的 assert 函數(shù)執(zhí)行基本的檢查統(tǒng)作。如果任何 assert 的求值結(jié)果不是真,或是在執(zhí)行過程中拋出任何異常。unittest 就會(huì)報(bào)告一次測(cè)試失敗或錯(cuò)誤。***的兩行負(fù)責(zé)在這個(gè)測(cè)試類內(nèi)部運(yùn)行測(cè)試,方法是直接運(yùn)行該模塊即可。
要獨(dú)立運(yùn)行該測(cè)試類,可以按前面所說的相同方式運(yùn)行 FeedparserTest.py 模塊。在 Eclipse Navigator 視圖中選擇 FeedparserTest.py。然后通過 Python測(cè)試框架> Run 運(yùn)行。此時(shí)顯示啟動(dòng)配置窗口。除 Base 目錄之外,其他都保持缺省值即可。Base 目錄必須是 feedParserTest 項(xiàng)目的目錄。
這樣才能在當(dāng)前目錄下找到 RSS 文件(testData/developerworks.rss)。修改 base 目錄的設(shè)置,然后點(diǎn)擊“Run”。輸出信息顯示在 Console 上。 您也許希望我們編寫的所有單元測(cè)試都能夠作為構(gòu)建的一部分自動(dòng)執(zhí)行。將下面清單 5 所示的構(gòu)建片斷加入構(gòu)建腳本便可實(shí)現(xiàn)。
***行是目標(biāo)聲明,這與其他的腳本相同。第 2 至第 6 行調(diào)用 py-test 任務(wù)。這部分代碼將在“src”目錄下查找所有以“Test.py”結(jié)尾的所有文件,并運(yùn)行所有測(cè)試。 PYTHONPATH 設(shè)置為“src”,測(cè)試執(zhí)行的當(dāng)前工作目錄就是當(dāng)前目錄(‘.’)。
【編輯推薦】