咨詢郵箱 咨詢郵箱:service@yitianxinda.com 咨詢熱線 咨詢熱線:18101296137 微博 微信
軟件開發公司通過demo學習OpenStack開發——單(dān)元測(cè)試_北京軟件開發公司
發表日期:2016-06-15 10:58:33    文章編輯:yitianxinda    浏覽次數:

  軟件開發公司,本文将進入單元測試的部分,這也是基礎知識中較後一個大塊。本文将重點講述Python和OpenStack中的單元測試的生态環境。

  通過demo學習OpenStack開發——單(dān)元測(cè)試

  單元測試的重要性

  單元測試工具

  unittest

  mock

  testtools

  fixtures

  testscenarios

  subunit

  testrepository

  coverage

  tox

  單元測試工具小結

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

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

  使用testrepository管理測(cè)試(shì)的運行

  單(dān)元測(cè)試用例的代碼架構

  總結

  系列後記

  單元測試的重要性

  GitHub上有個人畫瞭(le)一些不同語言的學習曲線圖:Learning Curves (for different programming languages),雖然有些惡搞的傾向,不過確(què)實說明瞭(le)問題。這裏貼一下Python的部分:

  這個圖說明瞭(le),會單元測試對於(yú)提高Python生産力的重要性,這主要是因爲Python是個動态語言,很多問題都無法通過靜态編譯檢查來發現,因此單元測試就成瞭(le)一個重要的確保質量的手段。OpenStack的核心項目都對單元測試有極高的要求,以保證項目的高質量。

  單元測試工具

  Python的單元測試工具很多,爲單元測試提供不同方面的功能。OpenStack的項目也基本把現在流行的單元測試工具都用全瞭(le)。單元測試可以說是入門OpenStack開發的較難的部分,也是較後一公裏。本章,我們就介紹一下在OpenStack中會用到的單元測試的工具。由於(yú)數量很多,不可能詳細介紹,因此主要做一些概念和用途上的介紹。

  unittest

  unittest是Python的标準庫,提供瞭(le)較基本的單元測試功能,包括單元測試運行器(簡稱runner)和單元測試框架。項目的單元測試代碼的測試類可以繼承unittest.TestCase類,這樣這個類就能夠被runner發現並(bìng)且執行。同時,unittest.TestCase這個類還定義瞭(le)setUp(),tearDown(),setUpClass()和tearDownClass()方法,是用來運行單元測試前的設置工作代碼和單元測試後的清理工作代碼,這個也是所有Python代碼遵守的規範,所以第三方的單元測試庫和框架也都遵循這個規範。

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

  unittest是學習Python單(dān)元測(cè)試較基本也較重要的一個庫,完整的說明請查看官方文檔。

  mock

  mock也是另一個重要的單元測試庫,在Python 2中是作爲一個第三方庫被使用的,到Python 3時,就被納入瞭(le)标準庫,可見這個庫的重要性。簡單的說,mock就是用來模拟對象的行爲,這樣在進行單元測試的時候,可以指定任何對象的返回值,便於(yú)測試對外部接口有依賴的代碼。關於(yú)mock的使用,可以查看我之前寫的這篇文章Python Mock的入門。

  testtools

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

  fixtures

  fixture的意思是固定裝置,在Python的單元測試中,是指某段可以複用的單元測試setUp和tearDown代碼組合。一個fixture一般用來實現某個組件的setUp和tearDown邏輯,比如測試前要先創建好某些數據,測試後要删掉這些數據,這些操作就可以封裝到一個fixture中。這樣不同的測試用例就不用重複寫這些代碼,隻要使用fixture即可。fixtures模塊是一個第三方模塊,提供瞭(le)一種簡單的創建fixture類和對象的機制,並(bìng)且也提供瞭(le)一些内置的fixture。具體的使用方法可以查看官方文檔。

  testscenarios

  testscenarios模塊滿足瞭(le)場景測試的需求。它的基本用法是在測試類中添加一個類屬性scenarios,該屬性是一個元組,定義瞭(le)每一種場景下不同的變量的值。比如說你測試一段數據訪問代碼,你需要測試該代碼在使用不同的驅動時,比如MongoDB、SQL、File,是否都能正常工作。我們有三種辦(bàn)法:

  較笨的辦(bàn)法是爲不同的驅動把同一個測試用例編(biān)寫3遍。

  比較好的辦(bàn)法是,編(biān)寫一個統一的非測試用例方法,接收driver作爲參數,執行測試邏輯,然後再分别編(biān)寫三個測試用例方法去調用這個非測試用例方法。

  更好的辦(bàn)法就是使用testscenarios模塊,定義好scenarios變(biàn)量,然後實現一個測試用例方法。

  testscenarios模塊(kuài)在OpenStack Ceilometer中被大量使用。更多的信息可以查看文檔(dàng)。

  subunit

  subunit是一個用於傳輸單元測試結果的流協議。一般來說,運行單元測試的時候是把單元測試的結果直接輸出到标準輸出,但是如果運行大量的測試用例,這些測試結果就很難被分析。因此就可以使用python-subunit模塊來運行測試用例,並(bìng)且把測試用例通過subunit協議輸出,這樣測試結果就可以被分析工具聚合以及分析。python-subunit模塊自帶瞭(le)一些工具用來解析subunit協議,比如你可以這樣運行測試用例:$ python -m subunit.run test_module | subunit2pyunit,subunit2pyunit命令會解析subunit協議,並(bìng)且輸出到标準輸出。關於subunit的更多信息,請查看官方文檔。

  testrepository

  OpenStack中使用testrepository模塊管理單元測試用例。當一個項目中的測試用例很多時,如何更有效的處理單元測試用例的結果就變得很重要。testrepository的出現就是爲瞭(le)解決這個問題。testrepository使用python-subunit模塊來運行測試用例,然後分析subunit的輸出並(bìng)對測試結果進行記錄(記錄到本地文件)。舉例來說,testrepository允許你做這樣的事情:

  知道哪些用例運行時間(jiān)較長(zhǎng)

  顯示運行失敗的用例

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

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

  coverage

  coverage是用來計算代碼運行時的覆蓋率的,也就是統計多少代碼被執行瞭(le)。它可以和testrepository一起使用,用來統計單元測試的覆蓋率,在運行完單元測試之後,輸出覆蓋率報(bào)告。具體的使用方法可以查看官方文檔。

  tox

  tox是用來管理和構建虛拟環境(virtualenv)的。對於(yú)一個項目,我們需要運行Python 2.7的單元測(cè)試,也需要運行Python 3.4的單元測(cè)試,還需要運行PEP8的代碼檢查。這些不同的任務需要依賴不同的庫,所以需要使用不同的虛拟環境。使用tox的時候,我們會在tox的配置文件tox.ini中指定不同任務的虛拟環境名稱,該任務在虛拟環境中需要安裝哪些包,以及該任務執行的時候需要運行哪些命令。更多信息,請查看官方文檔。

  單元測試工具小結

  本章介紹瞭(le)OpenStack中常用的單元測(cè)試工具的基本用途,希望大家對這些工具有個大概的認識。這裏我們可以按照類别總結一下這些工具:

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

  使用tox來管理測(cè)試運行的虛拟環境,並(bìng)且調用testrepository來執行測(cè)試用例。

  測(cè)試(shì)用例的運行和管理: testrepository, subunit, coverage

  testrepository調(diào)用subunit來執行測(cè)試用例,對測(cè)試結果進行聚合和管理;調(diào)用coverage來執行代碼覆蓋率的計算。

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

  使用testtools作爲所有測(cè)試用例的基類,同時應用mock, fixtures, testscenarios來更好的編(biān)寫測(cè)試用例。

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

相關文章推薦
下一代工業進步被稱爲工業4.0,旨在将傳統行業(如自動化)互聯互通並實現計算機化。工業4.0的目标是使工廠變得更加智能,提高适應性和資源效率,以及改善工廠之間供...
您正在尋找能夠将您令人驚歎的應用程序想法變爲現實的人。我應該聘請軟件公司還是兼職開發者?這可能是每個新晉産品所有者問自己的最常見問題。在開始開發過程之前,您需要...
從頭開始構建網站並托管和維護或改造舊網站需要聘請一支擁有技能和專業知識的團隊。如果您不想進一步擴大團隊,不想經曆招聘大手筆,或者想降低離岸成本,北京軟件開發外包...
物聯網 ( IoT ) 概念首次出現時,曾有大膽預測稱,到 2020 年,物聯網連接設備數量将達到 500 億甚至數萬億。這些極高的估值引發瞭炒作,但最終被證明...
下一代工業進步被稱爲工業4.0,旨在将傳統行業(如自動化)互聯互通並實現計算機化。工業4.0的目标是使工廠變得更加智能,提高适應性和資源效率,以及改善工廠之間供...
企業需要強大且可靠的在線形象才能取得成功。Magento 已成爲領先的電子商務平台,爲各種規模的企業提供強大的功能和定制選項。對於希望通過基於 Magento ...
随著新的城市網絡分析軟件插件從北京軟件開發公司,建築師和城市規劃者可以用數學網絡分析方法來描述城市的空間格局。在這裏,從一個插件的屏幕截圖顯示無障礙公共運輸(公共...
人工智能(AI)和機器學習(ML)是AI的關鍵組成部分和驅動力,在科技界並不是新概念。而且,盡管它們得到瞭關注,但對於使用這些工具來改善業務運營和使軟件應用程序更加智能的...
網址:------ 接洽電話 -----對待北京軟件開墾公司本文由:()宣布,我們在江南[浙江 江蘇 上海]你領會殊勝區域,電話) 接洽方式 北京殊勝新聞科技軟件外包開墾郵箱: 北京軟件開發公...
企業需要強大且可靠的在線形象才能取得成功。Magento 已成爲領先的電子商務平台,爲各種規模的企業提供強大的功能和定制選項。對於希望通過基於 Magento ...
  北京軟件開發茶樓咖啡廳會員管理系統會員儲值管理系統積分管理軟件   适用行業:茶樓會所。   産品特色:   A、運行穩定:   B、超強功能:...
我們日益互聯的世界面臨越來越多軟件漏洞和安全缺陷的風險。在鑽石項目開發新的安全測試模式導緻瞭幾個歐洲的中小企業帶來新的産品和服務進入這個快速增長的市場,並繼續影響...