OpenStack基礎知識-單元測試工具介紹

針對之前學的內容的一個簡單整理python

一、單元測試工具介紹 unittest: 是 Python 的標準庫,提供了最基本的單元測試功能,包括 單元測試運行器(簡稱runner) 和 單元測試框架。項目的單元測試代碼的測試類能夠繼承 unittest.TestCase 類,那麼這個類就可以被 runner 發現而且執行。同時, unittest.TestCase 這個類還定義了 setUp() , tearDown() , setUpClass() 和 tearDownClass() 方法,是用來運行 單元測試前的設置工做代碼 和 單元測試後的清理工做代碼,可使用 $ python -m unittest test_module 的命令來執行某個模塊的單元測試。ios

mock: 用來模擬對象的行爲,這樣在進行單元測試的時候,能夠指定任何對象的返回值,便於測試對外部接口有依賴的代碼(導入型代碼)。框架

testtools: 是個 unittest 的擴展框架,主要是在 unittest 的基礎上提供了更好的 assert 功能,使得寫單元測試更加方便。工具

fixtures: 的意思是固定裝置,在 Python 的單元測試中,是指某段能夠複用的單元測試 setUp() 和 tearDown() 代碼組合。一個 fixture 通常用來實現某個組件的 setUp() 和 tearDown() 邏輯,好比: 測試前要先建立好某些數據,測試後要刪掉這些數據,這些操做就能夠封裝到一個 fixture 中。這樣不一樣的測試用例就不用重複寫這些代碼,只要使用 fixture 便可。fixtures 模塊是一個第三方模塊,提供了一種簡單的建立 fixture 類和對象的機制,而且也提供了一些內置的 fixture。單元測試

testscenarios: 模塊知足了場景測試的需求。它的基本用法是在測試類中添加一個類屬性 scenarios ,該屬性是一個元組,定義了每一種不一樣的場景下都會不一樣的變量值。好比說你測試一段數據訪問代碼,你須要測試該代碼在使用不一樣的驅動時(MongoDB/MySQL/File)是否都能正常工做。最好的辦法就是使用 testscenarios 模塊,定義好會應場景而改變的scenarios 變量,而後實現一個測試用例方法。testscenarios 模塊在 OpenStack Ceilometer 中被大量使用。測試

subunit: 是一個用於傳輸單元測試結果的流協議。通常來講,運行單元測試的時候是把單元測試的結果直接輸出到標準輸出,可是若是運行大量的測試用例時,這些大量的測試結果將難以被分析。所以使用 python-subunit 模塊來運行測試用例,而且把測試結果經過 subunit 協議輸出,這樣測試結果就能夠被分析工具聚合而且分析。python-subunit 模塊也自帶了一些分析工具用來解析 subunit 協議,好比:$ python -m subunit.run test_module | subunit2pyunit , subunit2pyunit 指令會解析 subunit 協議,而且將結果輸出到標準輸出。對象

testrepository: 用於管理單元測試用例, 當一個項目中的測試用例不少時,如何更有效的處理單元測試用例的結果就變得很重要。testrepository 會使用 python-subunit 模塊來運行測試用例,而後分析 subunit 協議的輸出並將測試結果記錄到本地文件. testrepository 可以讓你:一、知道哪些用例運行時間最長 二、顯示運行失敗的用例 三、從新運行上次運行失敗的用例繼承

coverage: 是用來計算代碼運行時的覆蓋率的,也就是統計多少代碼被執行了。它能夠和testrepository一塊兒使用,用來統計單元測試的覆蓋率,在運行完單元測試以後,輸出覆蓋率報告。接口

tox: tox是用來管理和構建虛擬環境(virtualenv)的。對於一個項目,咱們須要運行Python 2.7的單元測試,也須要運行Python 3.4的單元測試,還須要運行PEP8的代碼檢查。這些不一樣的任務須要依賴不一樣的庫,因此須要使用不一樣的虛擬環境。使用tox的時候,咱們會在tox的配置文件 tox.ini 中指定不一樣任務的虛擬環境名稱,該任務在虛擬環境中須要安裝哪些包,以及該任務執行的時候須要運行哪些命令it

二、單元測試工具使用流程 首先使用 unittest, mock, testtools, fixtures, testscenarios 等工具和模塊來編寫單元測試用例,而後使用 tox 來管理單元測試運行時的虛擬環境,tox 再調用 testrepository 來管理這些測試用例,其中 testrepository 會調用 subunit 來執行測試用例, 而且一同聚合和分析測試結果,最後testrepository 調用 coverage 來執行代碼覆蓋率的計算

相關文章
相關標籤/搜索