本文中主要使用的測試工具為 selenium Remote Core(Selenium RC),因此本文以下主要以 selenium RC 為例介紹 selenium 的技術原理及與 RFT 結合使用的實現方法。
從圖 1 可以看出,Selenium RC 主要由 Selenium Server 和 Client Libraries 兩部分組成。圖 1 給出了 Selenium 的原理框架圖。
Selenium Server:Selenium Server 負責控制瀏覽器的操作。Selenium Server 主要包括 3 個部分:Launcher,Http Proxy,Selenium Core。其中 Selenium Core 是被 Selenium Server 嵌入到瀏覽器頁面中的,這樣操作的目的可以使其實現同源策略。其實 Selenium Core 是一堆 Java Script 函數的集合,是通過這些 Java Script 函數,我們才可以實現用程序對瀏覽器進行各種操作。
Client Libraries:Client Libraries 為程序設計語言與 Selenium RC server 提供了一個接口,可以調用各種程序設計語言,來實現自動化測試的要求。
圖 1. Selenium 原理框架圖
Selenium RC 的工作原理,圖 2 給出了 Selenium RC 的工作原理圖。
測試用例通過 Client Libraries 的接口向 Selenium Server 發送 Http 請求,和 Selenium Server 建立連接。
Selenium Server 的 Launcher 啟動瀏覽器,把 Selenium Core 加載到瀏覽器頁面中,并把瀏覽器的代理設置為 Selenium Server 的 Http 代理協議。
測試用例通過 Client Libraries 的接口向 Selenium Server 發送 Http 請求,Selenium Serve 對請求進行解析,然后通過 Http 代理發送 JavaScript 命令通知 Selenium Core 執行操作瀏覽器的動作。
Selenium Core 接收到 JavaScript 命令后,執行相應的操作。
瀏覽器收到新的頁面請求信息,而后發送 Http 請求,要求新的 Web 頁面。由于 Selenium Server 在啟動瀏覽器時已做了相應的操作,所以 Selenium Server 會接收到所有由它啟動的瀏覽器發送的請求。
Selenium Server 接收到瀏覽器的發送的 Http 請求后,自己重組 Http 請求,獲取對應的 Web 頁面。
Selenium Server 的 Http 代理把接收的 Web 頁面返回給瀏覽器。
圖 2. Selenium 工作原理圖
下面為了詳細說明 Selenium 具體的實現方法,清單 1 給出了一個用 Selenium 提供的方法實現百度搜索的實例代碼,代碼應用的語言為 Java。
清單 1. 基于 Java 語言的 Selenese 開發代碼
ant; padding-left: 2px; padding-right: 2px; font-family: arial, nsimsun, sans-serif; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 2px">
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
public class Test extends TestCase {
public void setUp() throws Exception {
setUp("http://www.baidu.com/", "*firefox");}
public void testone() throws Exception {
selenium.open("/");
selenium.type("ibm", "selenium rc");
selenium.click("btnG");
selenium.waitForPageToLoad("10000");
assertTrue(selenium.isTextPresent("Results * for selenium rc"));
}
}
RFT 技術簡介
IBM Rational Functional Tester (RFT) 是一款先進的,具有自動化測試的功能的回歸測試工具,它適合測試人員和 GUI 開發人員。Rational Functional Tester 的基礎是針對于 Java、.NET 的對象技術和基于 Web 應用程序的錄制、回放功能。工具為測試者的活動提供的自動化的幫助,如數據驅動測試。它既包括了簡單的適合一般測試人員的 Record 和 Replay 模式,又包括了適合自動化開發人員的腳本語言模式,實現了各種高級定制功能。同時,它為 Java 和 Web 測試人員,提供了和開發人員同樣的操作平臺 (Eclipse),并通過提供與 IBM Rational 整個測試生命周期軟件的完美集成,真正實現了一個平臺統一整個軟件開發團隊的能力 , 同時也方便了與其他測試工具集成,使之能夠完成更加強大的測試功能。
下面將簡單介紹 RFT 的工作原理:
工作原理 1:在 Record 和 Replay 模式下 , 如圖 3 中所示,當 RFT 測試腳本開發人員在 test script 中,通過調用組件對象 Test Object 的方法對該組件進行操作的過程中,該 Test Object 會查找到與其對應的 Test Object Proxy 對象,從而使用 Test Object Proxy 來對該 Test Object 進行獲取和操作。
圖 3. RFT 原理結構圖