中国淫片-中国在线播放精品区-中国在线观看免费的www-中国做爰国产精品视频-国产一区二区三区不卡在线观看-国产一区二区三区不卡观

咨詢郵箱?咨詢郵箱:[email protected] 咨詢熱線?咨詢熱線:18101296137 微博 微信
軟件開(kāi)發(fā)公司通過(guò)demo學(xué)習(xí)OpenStack開(kāi)發(fā)——單元測(cè)試_北京軟件開(kāi)發(fā)公司
發(fā)表日期:2016-06-15 10:58:33 ?? 文章編輯:yitianxinda ?? 瀏覽次數(shù):

  軟件開(kāi)發(fā)公司,本文將進(jìn)入單元測(cè)試的部分,這也是基礎(chǔ)知識(shí)中較后一個(gè)大塊。本文將重點(diǎn)講述Python和OpenStack中的單元測(cè)試的生態(tài)環(huán)境。

  通過(guò)demo學(xué)習(xí)OpenStack開(kāi)發(fā)——單元測(cè)試

  單元測(cè)試的重要性

  單元測(cè)試工具

  unittest

  mock

  testtools

  fixtures

  testscenarios

  subunit

  testrepository

  coverage

  tox

  單元測(cè)試工具小結(jié)

  Keystone的單元測(cè)試框架

  使用tox進(jìn)行測(cè)試環(huán)境管理

  使用testrepository管理測(cè)試的運(yùn)行

  單元測(cè)試用例的代碼架構(gòu)

  總結(jié)

  系列后記

  單元測(cè)試的重要性

  GitHub上有個(gè)人畫了一些不同語(yǔ)言的學(xué)習(xí)曲線圖:Learning Curves (for different programming languages),雖然有些惡搞的傾向,不過(guò)確實(shí)說(shuō)明了問(wèn)題。這里貼一下Python的部分:

  這個(gè)圖說(shuō)明了,會(huì)單元測(cè)試對(duì)于提高Python生產(chǎn)力的重要性,這主要是因?yàn)镻ython是個(gè)動(dòng)態(tài)語(yǔ)言,很多問(wèn)題都無(wú)法通過(guò)靜態(tài)編譯檢查來(lái)發(fā)現(xiàn),因此單元測(cè)試就成了一個(gè)重要的確保質(zhì)量的手段。OpenStack的核心項(xiàng)目都對(duì)單元測(cè)試有極高的要求,以保證項(xiàng)目的高質(zhì)量。

  單元測(cè)試工具

  Python的單元測(cè)試工具很多,為單元測(cè)試提供不同方面的功能。OpenStack的項(xiàng)目也基本把現(xiàn)在流行的單元測(cè)試工具都用全了。單元測(cè)試可以說(shuō)是入門OpenStack開(kāi)發(fā)的較難的部分,也是較后一公里。本章,我們就介紹一下在OpenStack中會(huì)用到的單元測(cè)試的工具。由于數(shù)量很多,不可能詳細(xì)介紹,因此主要做一些概念和用途上的介紹。

  unittest

  unittest是Python的標(biāo)準(zhǔn)庫(kù),提供了較基本的單元測(cè)試功能,包括單元測(cè)試運(yùn)行器(簡(jiǎn)稱runner)和單元測(cè)試框架。項(xiàng)目的單元測(cè)試代碼的測(cè)試類可以繼承unittest.TestCase類,這樣這個(gè)類就能夠被runner發(fā)現(xiàn)并且執(zhí)行。同時(shí),unittest.TestCase這個(gè)類還定義了setUp(),tearDown(),setUpClass()和tearDownClass()方法,是用來(lái)運(yùn)行單元測(cè)試前的設(shè)置工作代碼和單元測(cè)試后的清理工作代碼,這個(gè)也是所有Python代碼遵守的規(guī)范,所以第三方的單元測(cè)試庫(kù)和框架也都遵循這個(gè)規(guī)范。

  unittest庫(kù)也提供了一個(gè)runner,可以使用$ python -m unittest test_module的命令來(lái)執(zhí)行某個(gè)模塊的單元測(cè)試。另外,在Python中指定要運(yùn)行的單元測(cè)試用例的完整語(yǔ)法是:path.to.your.module:ClassOfYourTest.test_method。

  unittest是學(xué)習(xí)Python單元測(cè)試較基本也較重要的一個(gè)庫(kù),完整的說(shuō)明請(qǐng)查看官方文檔。

  mock

  mock也是另一個(gè)重要的單元測(cè)試庫(kù),在Python 2中是作為一個(gè)第三方庫(kù)被使用的,到Python 3時(shí),就被納入了標(biāo)準(zhǔn)庫(kù),可見(jiàn)這個(gè)庫(kù)的重要性。簡(jiǎn)單的說(shuō),mock就是用來(lái)模擬對(duì)象的行為,這樣在進(jìn)行單元測(cè)試的時(shí)候,可以指定任何對(duì)象的返回值,便于測(cè)試對(duì)外部接口有依賴的代碼。關(guān)于mock的使用,可以查看我之前寫的這篇文章Python Mock的入門。

  testtools

  testtools是個(gè)unittest的擴(kuò)展框架,主要是在unittest的基礎(chǔ)上提供了更好的assert功能,使得寫單元測(cè)試更加方便。具體可以查看文檔。

  fixtures

  fixture的意思是固定裝置,在Python的單元測(cè)試中,是指某段可以復(fù)用的單元測(cè)試setUp和tearDown代碼組合。一個(gè)fixture一般用來(lái)實(shí)現(xiàn)某個(gè)組件的setUp和tearDown邏輯,比如測(cè)試前要先創(chuàng)建好某些數(shù)據(jù),測(cè)試后要?jiǎng)h掉這些數(shù)據(jù),這些操作就可以封裝到一個(gè)fixture中。這樣不同的測(cè)試用例就不用重復(fù)寫這些代碼,只要使用fixture即可。fixtures模塊是一個(gè)第三方模塊,提供了一種簡(jiǎn)單的創(chuàng)建fixture類和對(duì)象的機(jī)制,并且也提供了一些內(nèi)置的fixture。具體的使用方法可以查看官方文檔。

  testscenarios

  testscenarios模塊滿足了場(chǎng)景測(cè)試的需求。它的基本用法是在測(cè)試類中添加一個(gè)類屬性scenarios,該屬性是一個(gè)元組,定義了每一種場(chǎng)景下不同的變量的值。比如說(shuō)你測(cè)試一段數(shù)據(jù)訪問(wèn)代碼,你需要測(cè)試該代碼在使用不同的驅(qū)動(dòng)時(shí),比如MongoDB、SQL、File,是否都能正常工作。我們有三種辦法:

  較笨的辦法是為不同的驅(qū)動(dòng)把同一個(gè)測(cè)試用例編寫3遍。

  比較好的辦法是,編寫一個(gè)統(tǒng)一的非測(cè)試用例方法,接收driver作為參數(shù),執(zhí)行測(cè)試邏輯,然后再分別編寫三個(gè)測(cè)試用例方法去調(diào)用這個(gè)非測(cè)試用例方法。

  更好的辦法就是使用testscenarios模塊,定義好scenarios變量,然后實(shí)現(xiàn)一個(gè)測(cè)試用例方法。

  testscenarios模塊在OpenStack Ceilometer中被大量使用。更多的信息可以查看文檔。

  subunit

  subunit是一個(gè)用于傳輸單元測(cè)試結(jié)果的流協(xié)議。一般來(lái)說(shuō),運(yùn)行單元測(cè)試的時(shí)候是把單元測(cè)試的結(jié)果直接輸出到標(biāo)準(zhǔn)輸出,但是如果運(yùn)行大量的測(cè)試用例,這些測(cè)試結(jié)果就很難被分析。因此就可以使用python-subunit模塊來(lái)運(yùn)行測(cè)試用例,并且把測(cè)試用例通過(guò)subunit協(xié)議輸出,這樣測(cè)試結(jié)果就可以被分析工具聚合以及分析。python-subunit模塊自帶了一些工具用來(lái)解析subunit協(xié)議,比如你可以這樣運(yùn)行測(cè)試用例:$ python -m subunit.run test_module | subunit2pyunit,subunit2pyunit命令會(huì)解析subunit協(xié)議,并且輸出到標(biāo)準(zhǔn)輸出。關(guān)于subunit的更多信息,請(qǐng)查看官方文檔。

  testrepository

  OpenStack中使用testrepository模塊管理單元測(cè)試用例。當(dāng)一個(gè)項(xiàng)目中的測(cè)試用例很多時(shí),如何更有效的處理單元測(cè)試用例的結(jié)果就變得很重要。testrepository的出現(xiàn)就是為了解決這個(gè)問(wèn)題。testrepository使用python-subunit模塊來(lái)運(yùn)行測(cè)試用例,然后分析subunit的輸出并對(duì)測(cè)試結(jié)果進(jìn)行記錄(記錄到本地文件)。舉例來(lái)說(shuō),testrepository允許你做這樣的事情:

  知道哪些用例運(yùn)行時(shí)間較長(zhǎng)

  顯示運(yùn)行失敗的用例

  重新運(yùn)行上次運(yùn)行失敗的用例

  testrepository的更多信息,請(qǐng)查看官方文檔。

  coverage

  coverage是用來(lái)計(jì)算代碼運(yùn)行時(shí)的覆蓋率的,也就是統(tǒng)計(jì)多少代碼被執(zhí)行了。它可以和testrepository一起使用,用來(lái)統(tǒng)計(jì)單元測(cè)試的覆蓋率,在運(yùn)行完單元測(cè)試之后,輸出覆蓋率報(bào)告。具體的使用方法可以查看官方文檔。

  tox

  tox是用來(lái)管理和構(gòu)建虛擬環(huán)境(virtualenv)的。對(duì)于一個(gè)項(xiàng)目,我們需要運(yùn)行Python 2.7的單元測(cè)試,也需要運(yùn)行Python 3.4的單元測(cè)試,還需要運(yùn)行PEP8的代碼檢查。這些不同的任務(wù)需要依賴不同的庫(kù),所以需要使用不同的虛擬環(huán)境。使用tox的時(shí)候,我們會(huì)在tox的配置文件tox.ini中指定不同任務(wù)的虛擬環(huán)境名稱,該任務(wù)在虛擬環(huán)境中需要安裝哪些包,以及該任務(wù)執(zhí)行的時(shí)候需要運(yùn)行哪些命令。更多信息,請(qǐng)查看官方文檔。

  單元測(cè)試工具小結(jié)

  本章介紹了OpenStack中常用的單元測(cè)試工具的基本用途,希望大家對(duì)這些工具有個(gè)大概的認(rèn)識(shí)。這里我們可以按照類別總結(jié)一下這些工具:

  測(cè)試環(huán)境管理: tox

  使用tox來(lái)管理測(cè)試運(yùn)行的虛擬環(huán)境,并且調(diào)用testrepository來(lái)執(zhí)行測(cè)試用例。

  測(cè)試用例的運(yùn)行和管理: testrepository, subunit, coverage

  testrepository調(diào)用subunit來(lái)執(zhí)行測(cè)試用例,對(duì)測(cè)試結(jié)果進(jìn)行聚合和管理;調(diào)用coverage來(lái)執(zhí)行代碼覆蓋率的計(jì)算。

  測(cè)試用例的編寫: unittest, mock, testtools, fixtures, testscenarios

  使用testtools作為所有測(cè)試用例的基類,同時(shí)應(yīng)用mock, fixtures, testscenarios來(lái)更好的編寫測(cè)試用例。

  在The Hacker's Guide to Python(《Python高手之路》)一書中,也有專門的一章介紹了各種單元測(cè)試工具及其用法,讀者也可以參考一下。下一章,我們來(lái)分析Keystone項(xiàng)目的單元測(cè)試框架,可以讓你看到在OpenStack的實(shí)際項(xiàng)目中,這些工具是如何被使用的。

相關(guān)文章推薦
下一代工業(yè)進(jìn)步被稱為工業(yè)4.0,旨在將傳統(tǒng)行業(yè)(如自動(dòng)化)互聯(lián)互通并實(shí)現(xiàn)計(jì)算機(jī)化。工業(yè)4.0的目標(biāo)是使工廠變得更加智能,提高適應(yīng)性和資源效率,以及改善工廠之間供...
您正在尋找能夠?qū)⒛钊梭@嘆的應(yīng)用程序想法變?yōu)楝F(xiàn)實(shí)的人。我應(yīng)該聘請(qǐng)軟件公司還是兼職開(kāi)發(fā)者?這可能是每個(gè)新晉產(chǎn)品所有者問(wèn)自己的最常見(jiàn)問(wèn)題。在開(kāi)始開(kāi)發(fā)過(guò)程之前,您需要...
從頭開(kāi)始構(gòu)建網(wǎng)站并托管和維護(hù)或改造舊網(wǎng)站需要聘請(qǐng)一支擁有技能和專業(yè)知識(shí)的團(tuán)隊(duì)。如果您不想進(jìn)一步擴(kuò)大團(tuán)隊(duì),不想經(jīng)歷招聘大手筆,或者想降低離岸成本,北京軟件開(kāi)發(fā)外包...
物聯(lián)網(wǎng) ( IoT ) 概念首次出現(xiàn)時(shí),曾有大膽預(yù)測(cè)稱,到 2020 年,物聯(lián)網(wǎng)連接設(shè)備數(shù)量將達(dá)到 500 億甚至數(shù)萬(wàn)億。這些極高的估值引發(fā)了炒作,但最終被證明...
下一代工業(yè)進(jìn)步被稱為工業(yè)4.0,旨在將傳統(tǒng)行業(yè)(如自動(dòng)化)互聯(lián)互通并實(shí)現(xiàn)計(jì)算機(jī)化。工業(yè)4.0的目標(biāo)是使工廠變得更加智能,提高適應(yīng)性和資源效率,以及改善工廠之間供...
企業(yè)需要強(qiáng)大且可靠的在線形象才能取得成功。Magento 已成為領(lǐng)先的電子商務(wù)平臺(tái),為各種規(guī)模的企業(yè)提供強(qiáng)大的功能和定制選項(xiàng)。對(duì)于希望通過(guò)基于 Magento ...
無(wú)疑重要加害了消耗者的權(quán)益。 電信運(yùn)營(yíng)商材干不偷用戶的流量嗎? 無(wú)須諱言,背后里它還偷呢!難道非要總理再次點(diǎn)名,進(jìn)修北京軟件拓荒公司。題目是運(yùn)營(yíng)商不只收費(fèi)高貴,明顯...
目前,互聯(lián)網(wǎng)大潮席卷全國(guó),“互聯(lián)網(wǎng)+”為各行各業(yè)注入了新的活力。作為傳統(tǒng)的教育行業(yè),該如何搭上“互聯(lián)網(wǎng)+”的東風(fēng),乘勢(shì)而起呢?...
北京APPP開(kāi)發(fā)公司簡(jiǎn)化物聯(lián)網(wǎng)APP開(kāi)發(fā)   軟件是基于Node.js服務(wù)器端Java框架,目標(biāo)從公共云端或物聯(lián)網(wǎng)(IoT)門戶運(yùn)行。作為微軟項(xiàng)目這已經(jīng)有Windows支持,但是項(xiàng)目希望同樣給OS X、安卓和...
北京軟件開(kāi)發(fā)公司藍(lán)牙開(kāi)發(fā)者網(wǎng)站新上線...
北京企業(yè)手機(jī)軟件開(kāi)發(fā)公司...
  北京軟件開(kāi)發(fā)茶樓咖啡廳會(huì)員管理系統(tǒng)會(huì)員儲(chǔ)值管理系統(tǒng)積分管理軟件   適用行業(yè):茶樓會(huì)所。   產(chǎn)品特色:   A、運(yùn)行穩(wěn)定:   B、超強(qiáng)功能:...
?
主站蜘蛛池模板: 日本老熟妇激情毛片 | 亚洲欧美日韩国产精品影院 | 欧美精品专区55页 | 99综合在线 | 精品国产一区二区三区成人 | 天堂色网站 | 香港aa三级久久三级老师 | 一个人看的日本免费视频 | 白白在线观看永久免费视频 | 欧美日韩高清在线观看一区二区 | 中文字幕在线视频网站 | 久久国产成人午夜aⅴ影院 久久国产成人亚洲精品影院老金 | 免费观看久久 | 欧美jlzz18性欧美 | 97视频免费播放观看在线视频 | 男人的天堂在线观看视频不卡 | 国产精品九九久久一区hh | 欧美日韩精品一区二区三区视频 | 免费中文字幕在线 | 久久久精品久久视频只有精品 | 亚洲一区亚洲二区 | 视频精品一区二区三区 | 99精品一区二区三区 | 一级爱做片免费观看久久 | 日韩欧美中文字幕在线播放 | 五月色婷婷琪琪综合伊人 | 奇米888四色在线精品 | 韩国三级大全久久网站 | 国产精品手机在线亚洲 | 欧美日韩一区二区视频免费看 | 成人手机在线 | tom影院亚洲国产日本一区 | 欧美大陆日韩 | 欧美乱爱 | 国产91啦| 日本一级特黄大一片免 | 亚洲产国偷v产偷v自拍涩爱 | 国产女女视屏免费 | 国产在线观看网址你懂得 | 亚洲在线网址 | 久久久久久免费视频 |