1. 程式人生 > >Openstack 測試小結(一)

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

,目的是擴充原本的host-list返回的屬性,簡單的增加了此屬性,然後在我搭建的OpenStack平臺測試了一遍,注意,我是直接將修改後的程式碼替換安裝的檔案的,而不是做的單元測試,結果正是預料的,很正確,然而提交到Nova上之後,遇到了錯誤。首先是gate-nova-pep8測試失敗,然後是gate-nova-python26/***測試失敗。

patch提交上去之後,第一件事是對程式碼風格進行檢測,是否符合指定的編碼規範。對程式碼風格的測試主要是使用flake8hacking,其中這兒有對程式碼編寫風格的規範指導 OpenStack Style Guidelines,這只是其中的Opentack自己的部分,還有整個

python語言的程式碼規範pep8。後者pep8是python官方推出的指南,描述了Python程式設計風格的方方面面,遵守此規範,可以保證不同的程式猿寫的python程式碼具有最大程度的相似風格,易於閱讀,交流。前者OpenStack hacking 則是在pep8的基礎上,針對OpenStack開發者做的補充。

Jenkins首先檢測你的編碼規範是否符合要求,若不符合要求,會在測試結果中給出詳細的說明。由於剛接觸,沒有經驗,則出現了兩個程式碼風格上的問題。

  1. import *** 時,需要按照字母表的順序在檔案前頭依次寫下多個import語句
  2. 我在寫字典的某項時"status":art,其中冒號沒有與art空一格,應該是"status": art

如果修改了某個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的實現,有更深的瞭解!