2009年5月24日 星期日

自動化測試 - Selenium

XP(extreme programming)方法論之賜,測試先行(Test before Write)的概念廣為人知。
也因此出現了Test-Driven Development(TDD)的開發方法論。

其實不管是XP或是傳統的瀑布式開發,測試本身都是軟體品質管理裡很重要的一環。
現在與以前的最大的差異,大概是傳統Client介面幾乎已被Web介面取代,甚至Web介面本身都進入2.0的時代(連Web3.0都有人提出了)...

那在自動化測試上有沒有什麼好的解決之道呢?
今天要介紹的是一個開源的Web自動化測試軟體 Selenium

下圖為Selenium官網的架構介紹:




自動化測試最有名的軟體大概是Mercury(現被HP併購)系列軟體,在尋找解決方案的過程中,我也有下載HP QuickTest Professional來試用,感想是滿好用的。可惜...所費不貲,所以先找找看是否有別的解決之道。

我理想中的自動化測試軟體應至少俱備下功能:
1. 便宜
2. 可用錄製方式產生測試劇本
3. 可加工開發以補足不足的功能(例如查詢資料庫確認資料正確性)
4. 支援多瀏覽器(至少IE及FireFox)
5. 支援ajax(現在很多網站都使用ajax來增強使用者體驗,若只判斷頁面是否loading完畢已不敷使用)


神奇的是,Selenium完全支援上述功能,甚至,還支援Grid以Multi-Site方式加快測試;而且,不用錢(佛心來著)...
Selenium(硒)即為Mercury(水銀)的解毒劑,這玩意兒根本完全是針對HP而來嘛...

以下稍微講解一下Selenium使用方式,若要讓自動測試工作的優雅些,約略需要寫一個自動測試框架會比較好(例如產出報表、變數參數化、自動運行不同瀏覽器...)。

Selenium提供了一個FireFox的Plug-in,即Selenium IDE,使用這個Plug-in即可快速錄製測試步驟。


除了錄製步驟,也可檢驗畫面上的文字


錄製完成後的Script長像如下:


這個Html語法,可以用Selenium IDE來重跑測試步驟,對於不會寫程式的人,此功能已幫忙省了很多功夫(但,只支援FireFox喔)

接下來,若需要Selenium更進階的功能(需搭配Selenium-Remote-Control),可先將Html轉換成別的語言格式(天啊...居然支援了Java/C#/Perl/PHP/Python/Ruby)



以下為轉成Java的範例


只要將轉出的語句加入自行開發的測試框架內,就可以每日早點下班,讓Selenium自動幫忙測試囉。

沒有留言: