要自動化測試網頁應用程式,除了 Selenium 之外,還有 Watir 這個工具可以使用。如果再加上 Cucumber 的話,更是如虎添翼。

在 Win32 環境底下,用 IE 跑網頁程式測試,比較速度的話,Watir 勝過 Selenium 許多。猜想是因為以 OLE 方式實作的關係。

Selenium 的最大賣點之一就是測試本身是寫在文件裡面的,因此本身就能夠做到類似 Behavior Testing 的效果。但是文件要寫得夠好。其架構也比較廣一些。測試來源、測試用伺服器、執行測試的節點,都可以分散。相對來說 Watir 只能單機跑,測試內容是寫在程式裡面。換句話說就是 Watir 的環境比較容易設置一些。

而 Cucumber + Watir 的組合,在撰寫測試以及測試成敗回報的這兩部分,則是遠遠超越了 Selenium。其優點在於:

  • 執行時能夠明確指出成功與失敗項目
  • 場景的前提若不成立,則其相關測試全部略過不執行。不會白白浪費時間跑一定會失敗的測試。

值得一提的是 Watir 也可將 Selenium 當成是一個虛擬瀏覽器,進而使用其架構。如果有必要架構起分散的測試環境的話,也可以這樣處理。

最近在自己的 Windows 環境上設置了 Cucumber + Watir 進行測試。可以驅動 IE6/7/8 (不過不是同時)。方法摘要如下:

  • 安裝 Ruby on Windows ,我選的是 1.8.6rc2
  • 安裝 watir。開 cmd.exe 執行:
gem update --system 
gem install watir
  • 安裝 cucumber: gem install cucumber

這樣裝起來的環境就可以驅動 IE 了。要驅動 Firefox 的話,得要裝 firewatir 這個 rubygem。並且 Firefox 本身要裝個 plugin。在 Watir 網頁上有得下載,請前往 http://wtr.rubyforge.org/install.html

我將最近寫的 Cucumber 測試稍微改過之後,貼在這裡 http://gist.github.com/90615。整份 clone 下來之後,就可以打 "cucumber" 執行全部的測試。

這個範例是在測試首頁有沒有登入與註冊的連結,內容請見 login_signup.feature

此外特別注意在其中的 support/env.rb 裡面,我加上這行:

WIN32OLE.codepage = WIN32OLE::CP_UTF8

不加的話,由 Watir 自動輸入到瀏覽器中文字就不會正確。