Openstack 測試小結(一)
在上一篇OpenStack Small Tests中翻譯了OpenStack Wiki中關於Small Tests的介紹。關於測試有很多的術語,例如單元測試,功能測試,整合測試,白盒測試,黑盒測試,其實這寫都是對某些同樣的測試目的不同的術語而已。而OpenStack Wiki上將這些都統一成了Small Test, Medium Test, Large Test,分別對應於單元測試,功能測試,整合測試。不同的測試階段,都已經有不同的測試工具了。
Small Tests中已經提到了Mox, Stubout等等python庫,Large Tests則是使用Tempest。
第二次向OpenStack Nova提交的patch,主要是修改了api下面的hosts.py檔案中的index函式,對應的api是nova host-list
gate-nova-pep8
測試失敗,然後是gate-nova-python26/***
測試失敗。
pep8
patch提交上去之後,第一件事是對程式碼風格進行檢測,是否符合指定的編碼規範。對程式碼風格的測試主要是使用flake8和hacking,其中這兒有對程式碼編寫風格的規範指導
OpenStack Style Guidelines,這只是其中的Opentack自己的部分,還有整個
Jenkins首先檢測你的編碼規範是否符合要求,若不符合要求,會在測試結果中給出詳細的說明。由於剛接觸,沒有經驗,則出現了兩個程式碼風格上的問題。
- import *** 時,需要按照字母表的順序在檔案前頭依次寫下多個import語句
- 我在寫字典的某項時
"status":art
,其中冒號沒有與art空一格,應該是"status": art
。
Small Test
如果修改了某個API,必須要現在本地做好測試,不然提交上去測試通不過。修改API後,需要做的測試是Small Tests。前面的文章是告訴我們如何編寫Small Test case, 但是在Nova Project中到底該如何進行Small Tests了。
在nova的目錄下面有一個.run_tests.sh
的指令碼,第一次執行它,會詢問要不要建立虛擬環境,建立虛擬環境則會在本地建立一個目錄.venv,然後將需要用到的python庫安裝到該目錄下,建立一個隔離的環境,這樣就不會因為系統中python某個庫版本和nova中要求的衝突了,並且可以很方便的建立多個虛擬環境,方便測試。
然而,在我建立完虛擬環境,執行run_tests.sh後,出現了下面的錯誤。invalid command testr
,之前還出現過找不到testr command,這需要使用pip install testrepository
安裝testrepository python 庫,該庫主要用來將儲存測試結果,方便對大量的測試結果進行查詢管理。執行run_tests.sh失敗之後,在OpenStack Launchpad Nova bugs上看到類似的問題,有的建議直接在真實環境中執行,./run_tests.sh
-N
,這樣就執行通過了,開始執行tests目錄下所有的測試用例了。
譬如測試tests下的某個子集:
./run_tests.sh scheduler //測試某個目錄下的用例
./run_tests.sh test_libvirt //測試某個檔案中的用例
./run_tests.sh test_libvirt:HostStateTestCase //測試某個檔案中的class用例
./run_tests.sh test_utils:ToPrimitiveTestCase.test_dict //測試某個檔案中class的某個方法用例
對於API的修改,還可能需要修改測試資料或者用測用例,否則,儘管自己修改後的API可以跑出正確的結果,卻因為測試用例或者資料沒有修改,Jenkins還是會報錯的,導致測試無法通過。
總結
上面提到的程式碼風格和Small Tests都是我在提交patch中遇到的,最深的感受是,作為一個新手,上次改變任何一個API的實現,最好做好全面的單元測試和整合測試(在nova/tests/integrated目錄下面有下面的api整合測試),否則,因為環環相扣,動一發牽全身,你會在意想不到的情況下引入新的BUG。並且對於測試之後,出現的任何報錯,都需要保持足夠高的警惕性,爭取將每個錯誤都解決,在這個過程中,會對API的實現,有更深的瞭解!