OpenStack基礎知識-單元測試工具介紹
針對以前學的內容的一個簡單整理
1、單元測試工具介紹
unittest: 是 Python 的標準庫,提供了最基本的單元測試功能,包括 單元測試運行器(簡稱runner) 和 單元測試框架。項目的單元測試代碼的測試類可以繼承 unittest.TestCase 類,那麽這個類就能夠被 runner 發現並且執行。同時, unittest.TestCase 這個類還定義了 setUp() , tearDown() , setUpClass() 和 tearDownClass() 方法,是用來運行 單元測試前的設置工作代碼 和 單元測試後的清理工作代碼,可以使用 $ python -m unittest test_module 的命令來執行某個模塊的單元測試。
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 能夠讓你:1、知道哪些用例運行時間最長 2、顯示運行失敗的用例 3、重新運行上次運行失敗的用例
coverage: 是用來計算代碼運行時的覆蓋率的,也就是統計多少代碼被執行了。它可以和testrepository一起使用,用來統計單元測試的覆蓋率,在運行完單元測試之後,輸出覆蓋率報告。
tox: tox是用來管理和構建虛擬環境(virtualenv)的。對於一個項目,我們需要運行Python 2.7的單元測試,也需要運行Python 3.4的單元測試,還需要運行PEP8的代碼檢查。這些不同的任務需要依賴不同的庫,所以需要使用不同的虛擬環境。使用tox的時候,我們會在tox的配置文件 tox.ini 中指定不同任務的虛擬環境名稱,該任務在虛擬環境中需要安裝哪些包,以及該任務執行的時候需要運行哪些命令
2、單元測試工具使用流程
首先使用 unittest, mock, testtools, fixtures, testscenarios 等工具和模塊來編寫單元測試用例,然後使用 tox 來管理單元測試運行時的虛擬環境,tox 再調用 testrepository 來管理這些測試用例,其中 testrepository 會調用 subunit 來執行測試用例, 並且一同聚合和分析測試結果,最後testrepository 調用 coverage 來執行代碼覆蓋率的計算
OpenStack基礎知識-單元測試工具介紹