l

2011年1月16日 星期日

土炮跨平台自動化功能測試環境

Jan. 16 16:58~18:52

上次 Teddy 談到要落實自動化功能測試需要建制一個『自動化測試環境』,並且要讓在這個環境中加入一個 acceptance tests 這件事變得很透明且很簡單。這樣講還是太抽象,今天趁著天氣冷颼颼宅在家裡,稍微談一下 Teddy 的經驗。首先 Teddy 先做一下背景說明:
  • Teddy 在這邊所說的『自動化功能測試』就是對軟體做『end-to-end 的測試』... 有講等於沒講... 基本上就是 (1) 準備一個乾淨的作業系統; (2) 安裝待測程式; (3) 從『使用者介面』測試待測程式的功能。
  • 上一點所說的『使用者介面』,除了 GUI 以外,也包含 CLI (command line interface) 或是應用程式所 export 的 access points (例如,透過網路連到待測程式)。
  • 該待測程式需要能夠在 Windows 與 Linux 平台執行,所以功能測試也必須要能夠在不同平台上自動執行。
  • 該待測程式支援很多資料庫,例如 MySQL, Oracle, SQL Server 等。功能測試必須要涵蓋這些支援的資料庫。
  • 自動化功能測試環境每天晚上會自動從 CI (持續整合) 系統下載最新的安裝程式做測試。
  • (作業系統平台 + 資料庫 + 待測程式)得到一組待測資料。所有的待測資料整合成一個報表讓開發人員隔天可以方便的知道測試結果。
『土炮跨平台自動化功能測試環境』的需求差不多就這樣子。也許市面上有什麼類似微軟 VSTS 這種『高檔貨』可以做到,但是 Teddy 這種貧苦人家的小孩實在無福消受,只好自己想辦法。

首先,先不要管測試的問題,先來看看『待測程式』(就是鄉民們所開發的系統啦)。如果可能的話,先幫待測程式寫一個『安裝與反安裝程式』,這一點 Teddy 在 『持續整合樣式:Installation Project 』有介紹,還沒看的快去看一下。這邊做一下重點提醒,安裝程式最好能夠支援 『silent mode』的安裝與反安裝(就是餵給安裝程式一個設定檔就可以不需要地球人的介入便可自動安裝或反安裝鄉民們的軟體),這樣可有助於自動化測試。

***

接著談一下『作業系統』的問題。假設這個跨平台軟體要支援以下四個 OS:
  • Windows 7 64-bit
  • Windows 2008 64-bit
  • Ubuntu 64-bit
  • CentOS 64-bit
一個最簡單的方法就是找『四台電腦』分別安裝這四個 OS,但是這樣有一個限制,萬一以後支援的 OS 變多了,例如增加 Windows 2003, Windows XP, Windows Vista 或是要支援 32-bit,那需要的電腦數目不就大增?

另外一個方法就是把所有的 OS 都裝在同一台電腦上面。用軟體把硬碟切成好幾個可以開機的分割區,每一個分割區裝一個 OS,然後『想一個方法』當測試案例執行完畢之後重新開機到『下一個開機磁區』。相信這個方法 99.9999% 的鄉民都想的出來,不過有一些技術上的困難。
  • 一個硬碟『好像』不能切太多可以開機的分隔區。
  • 就算想辦法可以切出很多『可開機』的分割區,安裝 OS 也要很小心。可能是 Teddy 手ㄎㄟ,常常一不小心把已經安裝好的分隔區給毀了。
  • 把分割區的作業系統單獨備份出來之後,要直接 restore 到其他的硬碟來 reuse 好像有點麻煩。
  • 最後這一點是最大的問題:如何『自動控制』每次開機要開到哪一個分隔區?如果硬碟裡面安裝的全部都是 Windows 作業系統,或是全部都是 Linux 作業系統,要做到這一點是比較簡單的,只要改 Windows 或 Linux 的開機設定檔案(文字檔案)就可以。但是如果硬碟混裝 Windows 與 Linux 那 Teddy 還沒找到什麼簡單的方法(歡迎知道的鄉民留言告知)。
在某年某月的某一天,Teddy 也忘了在什麼地方,看到了 DRBL 這個免錢的自由軟體,突然有了解決上述問題的靈感。簡單的說,DRBL (包含 PXE 與 Clonezilla) 可以把你的電腦硬碟的 image 存在 DRBL Server 上面,然後當電腦開機的時候(要選網路開機)再從 DRBL Server 上面把已經做好的 image 下載到你的電腦,然後用這份 image 開機。

結論就是,改用 DRBL 之後,就不需要對硬碟切不同的分割區,直接把你需要的 OS 安裝在硬碟上面,然後用 Cloneailla (已經整合到 DRBL 裡面) 把整個硬碟的 image 備份到 DRBL 便可。以這邊談到的例子,要支援 Windows 7 64-bit,Windows 2008 64-bit,Ubuntu 64-bit,與 CentOS 64-bit。先『手動』安裝 Windows 7 64-bit,安裝好後用 Cloneailla 把硬碟備份到 DRBL Server 上面,把這個備份的硬碟 image 取名為 P8QQF-Win7-64bit (P8QQF 是這台電腦主機板的編號)。然後安裝 Windows 2008 64-bit (蓋掉剛剛裝好的 Windows 7 64-bit),裝好後同樣備份為 P8QQF-Win2008-64bit。依此類推,最後做出四個 images。
  • P8QQF-Win7-64bit
  • P8QQF-Win2008-64bit
  • P8QQF-Ubuntu10.10-64bit
  • P8QQF-CentOS5.4-64bit

寫到這邊手好冷...XD... 這樣把可以開機的硬碟 images 全部集中到 DRBL Server 管理,以後如果還要支援新的作業系統也很簡單,至少 Teddy 覺的比起切硬碟分割區要容易管理。

不過講到這邊還有一個問題,就是如何『自動控制』每次開機要從 DRBL 上載入哪一份 image?關於這一點就要請有需要的鄉民自行研究一下 DRBL,總之 Teddy 以『學弟的性命擔保』,這絕對是可行的。有問題可以直接問 DRBL 作者,這是台灣人開發的喔(國家高速網路與計算中心),也算是『台灣之光』(Teddy 內心獨白:難得覺的每年繳的稅被拿去做些有意義的事)。

***

接著談一下資料庫的問題,這一點比較簡單。找一台電腦,把待測軟體所支援的資料庫全部裝在這台電腦上就 OK 了。

***

有了『安裝程式』,『作業系統』與『資料庫』,這樣『測試環境』就算是準備的差不多了,接下來要談一下『自動化功能測試』。光是這一點就可以寫一本書了,所以 Teddy 只能提一下自己『有限』經驗。
  • 用免錢的 Robot 來當作『自動化功能測試框架』。這個 Robot 真的很好用(Teddy 內心獨白:ㄟ... 雖然 Teddy 從來沒有用 Robot 寫過測試案例,不過 Teddy 的學弟與同事們用的很 happy)。這個 Robot 是 Teddy 的指導教授去上 Bas 的 Certified ScrumMaster 課程時,Bas 推薦的。Teddy 的指導教授回家之後用了一下覺的很好就介紹給學弟與 Teddy。Teddy 偷懶沒花時間試就再介紹給同事...
  • 對於提供 Web 介面的軟體,可以用 Selenium 操作瀏覽器來執行 GUI-based 的自動化功能測試。剛好 Robot 有整合 Selenium,所以用起來很方便。
  • 用 ant 當作 controller ,每日自動下載最新的安裝程式與測試程式,並啟動整個測試流程。
  • 將每一個平台的測試結果存成 xml ,待最後一個測試平台的測試案例執行完畢之後,跑一隻程式把各個平台的測試結果(讀這些 xml files)匯總成一個網頁。
再補充一點,同一個 Robot 測試案例可以藉由修改『變數』的方式,用來測試不同的資料庫。這樣也解決了測試不同資料庫的問題。Robot 也可以呼叫外部程式,所以透過 CLI 測試待測程式也沒問題。
 
***

結論:以上便是自行打造『跨平台自動化功能測試環境』的方法,完全免費(除了 Windows 和 商業 Database 要錢... XD)。雖然沒有詳細到『按圖施工,保證成功』的地步,不過相信有心人假以時日也可以做的到。

***

友藏內心獨白:當初裝冷氣的時後應該買有暖氣功能的... 無奈經費不足...

PS:補充一點,為什麼不直接把 OS 裝在 VM (用 VMWare 或是  VirtualBox 這種虛擬機器軟體)裡面就好了,還搞什麼 DRBL?殘念,因為 Teddy 開發的軟體是和『硬體相關』,需要直接讀取硬體的資料,裝在 VM 裡面是無法測試到這些與硬體相關的功能滴,因此才需要這麼『厚功夫』。如果鄉民們沒有這樣的問題,那麼用 VM 來取代便可 。21:41

6 則留言:

  1. 很實用...:P,雖然都在寫小不拉雞的程式

    Robot 是指 Rational Robot ??

    回覆刪除
  2. To Chih-Min,

    No, No, No, 窮苦人家的小孩用的當然是免錢的 Robot Framework http://code.google.com/p/robotframework/.

    回覆刪除
  3. UI測試很容易遇到不可思議的問題,當然我有很多感想,不過別人寫的更好,對照這篇看很詳細的介紹了
    http://www.infoq.com/cn/news/2010/12/dn-agile-test-2

    回覆刪除
  4. To M. Jwo:

    講到 UI 測試,Teddy 眼淚就快掉下來... 想當年唸書的時候,以『強迫中獎』的形式聽了 N 次的 GUI testing 論文報告。相同一個功能,如果有 CLI 模式可以測試就比較容易一點。不過有時候還是得透過 GUI 來測試軟體,畢竟這是 users 實際使用軟體的主要入口。

    回覆刪除
  5. http://blog.mountaingoatsoftware.com/the-forgotten-layer-of-the-test-automation-pyramid

    做UI atuomation ROI 真的不高, 常因UI 有改變就會讓automation改到翻掉


    david ko

    回覆刪除
  6. 雖說沒用過Robot Framework ,但是Rational Robot還算好用,稍微改點ui介面還是智慧化的測的下去,但是也是會測試的很辛苦。

    回覆刪除