顯示具有 selenium 標籤的文章。 顯示所有文章
顯示具有 selenium 標籤的文章。 顯示所有文章

2009年11月10日 星期二

Selenium Docs (4) - Selenium Grid

原文:Selenium Grid - How It Works

Selenium-RC 的問題
  • RC 控制 browser 很慢,除非你的網路或者網站本來就慢,否則 RC 會變成測試上的瓶頸(bottleneck)。
  • 一個 RC 上面能「同時執行」的測試有限,實際上開啟超過 6 個瀏覽器就會影響效能。(在 IE 上更慘)
  • 如果要開很多個 RC 來避開上述問題當然也是可以,不過維護這麼多個 RC 會很困難。

Selenium Grid 繼承 RC 的好處
  • 測試程式、測試網站、RC/瀏覽器是透過 http 聯繫的,所以可以在不同機器上面。
  • 測試程式跟網站是跟某個專案有關,但是 RC 跟瀏覽器與專案無關,所以架設起來之後可以很多個專案共用。
(... 閱讀「Selenium Docs (4) - Selenium Grid」全文)

2009年11月4日 星期三

Selenium Docs (3) - 測試設計考量與自訂功能

靜態頁面與動態頁面
存取靜態頁面上面的元件時,可以直接利用 id 定址,而動態頁面則因為每次載入的內容不同,element id 可能會跟著變動,因此必須依靠程式拿到頁面內容過濾後,找出要存取的元件。

AJAX 頁面測試
對於含有 AJAX 的頁面進行測試時,因為其資料是非同步更新,也不會造成頁面 reload,因此在存取元件時要特別小心。設定一個等待時間中止整個測試 thread 並不是一個好方法,因為無法時間是預期的。應該要時時去偵測想要存取的元素是否已經出現,會比較好。

UI Mapping
對於一些常用的網頁元件,例如登入欄位/按鈕,可以用 property 檔案來描述它們,避免直接在程式碼中定位(locator)它們,好處是:
  1. 避免這些常用元件散落在程式中。
  2. 承上,集中管理易於維護。
  3. 元件可以重新命名為較容易看懂的名稱,增加程式可讀性。
直接看原本的例子會更清楚。

Data Driven Testing
自動測試可以輔助手動測試,但當輸入資料有多筆時,要把資料跟程式內容分開,另外寫到一個檔案中。

資料庫驗證
可以直接利用程式存取資料庫的內容,作為測試的資料來源。例如做登入頁面測試時,可以拿資料庫已經註冊的帳號登入看看是否可以登入,或者拿未註冊成功的資料登入看看是否無法登入。

自訂功能
Selenium 允許自訂一些動作或定址方式,只要在他們的 object prototype 裡面加入自訂的 JavaScript 函數,並把函數依照規定命名。可以自訂的有:action、Accessors/Assertions、locator。
(... 閱讀「Selenium Docs (3) - 測試設計考量與自訂功能」全文)

2009年10月19日 星期一

Selenium Docs (2) - Remote Control (RC)

Selenium RC 組成
  • Selenium Server:負責打開/關閉瀏覽器、接受並執行指令,就像一個 HTTP proxy。在打開瀏覽器時會在這個瀏覽器中綁上 Selenium-Core, 這個 Selenium-Core 其實就是一堆 JavaScript 函式,幫你把 client 端傳來的指令換成瀏覽器可以執行的 JavaScript 指令。(目前 Selenium Server 是 .jar 檔案,因此要執行它必須有 JVM。)
  • Client libraries:提供一些 API 讓你可以用自己的程式語言與 Server 溝通。目前提供 Java、Python、C#、Ruby、PHP、Perl 等六個語言的 API。

回報結果
Selenium 沒有特別提供這種機制,但可與其它 Test Framework Reporting 工具結合。例如 Java 有 JUnit、TestNG...等。(參考支援的 Testing Frameworks)
題外話:Selenium IDE 有個很不錯的測試環境:Bromine,特別被 Selenium 支援。可以設定 test case 要做什麼事情、在哪些平台上執行、甚至分開到多個 server 同時執行,並且實際執行後回報結果。

在測試程式中執行 JavaScript
用 getEval(JavaScriptCode) 可以執行一段 JavaScript 程式,並得到它的回傳結果。例如可以用在取得動態網頁元素的 id、或者網頁上的圖片數目(有例子)。另外 JavaScript code 中記得用 window 物件來取得 dom,以免拿到不是測試視窗的內容。
(... 閱讀「Selenium Docs (2) - Remote Control (RC)」全文)

2009年8月27日 星期四

Selenium Docs (1) - 基本介紹

Selenium 介紹
Selenium 包含三大部分:(1) Selenium-IDE;(2) Selenium-RC;(3) Selenium-Grid。
  • Selenium-IDE:Firefox 的附加元件,可以錄下操作網頁的動作作為 test cases,也可以自己編輯這些 test cases。
  • Selenium-RC:讓會寫程式的人利用現有的程式語言做自動化測試,selenium 提供 API 並支援多種語言 (HTML, Java、C#、Perl、PHP、Python、Ruby) 方便寫 test cases。
  • Selenium-Grid:平行測試、跨瀏覽器測試。

Selenium 指令 (Selenese)
指令有三種型態:(1) 動作 Actions;(2) 存取 Accessors;(3) 判斷 Assertions。
  • 動作:用來操作頁面,例如:點擊(click)、輸入(type) ...等動作。如果動作執行出問題,這個測試會被中止。
  • 存取:查看目前頁面的狀態,或者把頁面內容存起來,例如 storeTitle。也會被用來判斷(Assertions)。
  • 判斷:類似存取(Accessors),但更進一步地做些檢查,例如看目前頁面的標題是否為X,某個欄位是否被勾選...等。有三種用法:宣稱(assert)、驗證(verify)、等候(waitFor)。宣稱某個正確的內容時,若實際內容與宣稱內容不符合,此測試會中斷。驗證則稍微寬鬆一些,測試會繼續執行而把錯誤存在紀錄的 log 中。等候則用來確認某些內容出現在頁面上(常見的情況是搭配有 ajax 的頁面使用),當該內容未在設定的時間內出現時 (timeout),則中斷測試。
(... 閱讀「Selenium Docs (1) - 基本介紹」全文)

2009年4月28日 星期二

Selenium Note

[Tutorial] [Documentation] [API] [Forum]

selenium 不能測的功能:
(1) 檔案上傳 - 無法控制 windows file chooser
(2) ActiveX 的操作
(3) applet 的操作
(4) Flash - [對策]
(5) 切換 domain [The Same Origin Policy]

Reference:
  • Google Developer Talk: http://tw.youtube.com/watch?v=EDb8yOM3Vpw

  • C. Titus Brown, Gheorghe Gheorghiu, Jason Huggins, An Introduction to Testing Web Applications with twill and Selenium , O'REILLY, 2007. [Google Preview]
  • (... 閱讀「Selenium Note」全文)