« 想輸入「燒肉」的時候... | Home | Good evils in Perl »

April 6, 2009

自動測試網頁應用程式

要自動化測試網頁應用程式,除了 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 自動輸入到瀏覽器中文字就不會正確。

No TrackBacks

TrackBack URL: http://gugod.org/mt/mt-tb.cgi/190

3 Comments

hello gugod,

想請問您是在 windows 的 cmd 下執行 cucumber 嗎?
我有試著執行你所提供的範例, 的確可以執行,
但是在 cmd 中顯示結果看起來會是亂碼.
因為 .feature 是 utf-8編碼, 而 cmd 預設是 MS950.
請問是我是否還需要額外設定什麼?
感激不盡.

ps.
我發現 cucumber 後來改成在 .feature 檔頭
寫 # language: zh-TW

Hi luke.chi,

現下我也記得是有在 cmd 中看到亂碼,您可以試試看在 cmd 中執行 chcp 65001。這樣可以將 cmd 切到 utf8 code page 去。之後也許 cucumber 顯示會正確。但我現下忘了有什麼副作用,也許我多慮了。

Hi gugod,

:) thanks for the 'chcp' tip, i've try it but not work well.

Right now i solve it by this way:
env.rb 加上 require 'cucumber/formatter/unicode'

There's more details in my note, hope be useful for you:

http://cloudymayday.blogspot.com/2010/02/cucumber.html

ps.不知道為何, 我設定 WIN32OLE::CP_UTF8 的話, Watir 填到 text field 的中文都會變成 '方塊' ( .feature & steps.rb 都是 utf-8 編碼). 所以我只好改用 CP_ACP, 然後自己把要 set 進 text field 的 String 用 iconv 從 UTF-8 轉成 Big5, 那中文字就會正確顯示了 (為了 "東區美食" 這四個字花了好一下子...) 雖然不太滿意這樣的做法但還可接受.

Leave a comment