使用分層的 Selenium 框架進行復雜 Web 應用的自動測試

發表于:2014-08-07來源:IBM作者:王晨點擊數: 標簽:selenium
在復雜 Web 應用程序的自動測試中,會產生大量冗余的測試腳本,同時,由于測試場景復雜多變,測試用例的靈活管理與調用是不可回避的需求。在本文中,作者通過將開源 Web 自動測試

  Selenium 概述

  Selenium 是一種 Web 應用的自動測試工具,通過模擬用戶對 Web 頁面的各種操作,可以精確重現軟件測試人員編寫的 Test Cases 步驟。Selenium 包含三個工具:Selenium-IDE,Selenium-RC 以及 Selenium-Core。其中,Selenium-Core 是驅動 Selenium 工作的核心部分,作為一個用 JavaScript 編寫的測試引擎,它可以操作 Web 頁面上的各種元素,諸如:點擊按鈕、輸入文本框,以及斷言 Web 頁面上存在某些文本與 Web 元素等。

  Selenium-IDE 是一個 Firefox 插件,能夠錄制回放用戶在 Firefox 中的行為,并把所記錄的 Selenese (Selenium Commands) 轉化為 Java/C#/Python/Ruby 等語言,在 Selenium-RC 中修改復用。對于較為復雜的 Test Cases,Selenium-IDE 的功能有限,往往用它錄制大致的步驟,再轉化為測試人員熟悉的編程語言,在此基礎上完善,形成更為強大且靈活的 Selenium-RC Test Cases。

  Selenium-RC(Selenium Remote Control)在 Web 瀏覽器與需要測試的 Web 應用間架設代理服務器(Selenium Server),使得 JavaScript 引擎與被測 Web 應用同源,繞開同源策略的限制(Same Origin Policy),進而取得對 Web 頁面進行各種操作的權限。

  回頁首

  開發環境配置

  以 Java 作為測試用語言為例,在 Eclipse 中新建一個 Java 項目 Test Search Engine,下載 Selenium-RC 軟件包,把 selenium server/selenium java client driver 的 Jar 以及 JUnit 庫加入到該項目的 Java Build Path。

  圖 1. Build Path 配置

圖 1. Build Path 配置

  啟動 Selenium-Server,可以在命令行中使用 java -jar命令直接運行可執行 Jar 包(對于中文 Windows 操作系統且使用 IBM JDK,還需要加參數 -Dibm.stream.nio=true)。如果想在 Java 程序中啟動 / 停止 Selenium-Server,首先,新建一個 RemoteControlConfiguration 對象 rcc,并指定遠程控制參數(包括配置 Selenium Server 的監聽端口,Firefox 瀏覽器的 Profile 等),然后新建一個 SeleniumServer 對象,把 rcc 傳入 SeleniumServer 的構造函數(對于中文 Windows 操作系統且使用 IBM JDK,在 Eclipse 的 Run Configurations 的 VM arguments 中加入 -Dibm.stream.nio=true)。

  清單 1. 使用 Java 啟動 / 停止 Selenium Server

  RemoteControlConfiguration rcc = new RemoteControlConfiguration();

  rcc.setPort(4444); // 指定 Selenium Server 開放端口

  SeleniumServer SELENIUM_SERVER;

  SELENIUM_SERVER = new SeleniumServer(rcc);

  SELENIUM_SERVER.start(); // 啟動 server

  // 測試代碼

  SELENIUM_SERVER.stop(); // 停止 server

  此外,Selenium Server 還可以通過 Ant 腳本來控制啟動 / 停止,這提供了另一種靈活而強大的項目控制方式。

  清單 2. 使用 Ant 腳本啟動 / 停止 Selenium Server

  在 Selenium-Server 啟動后,建立一個 Selenium 類的實例 selenium,并通過這個實例與 Selenium-Server 進行交互,方法如下。

  清單 3. Selenium 實例的啟動 / 停止

  Selenium selenium = new DefaultSelenium(java.lang.String serverHost,

  int serverPort,

  java.lang.String browserStartCommand,

  java.lang.String browserURL);

  selenium.start();

  // 經由 selenium 控制瀏覽器模擬各種用戶操作

  selenium.stop();

  Selenium 實例包含豐富接口,可以對各種 Web 元素進行各種操作。例如,在谷歌頁面中輸入“developerWorks”,點擊搜索按鈕,在結果頁面中驗證是否包含“developerWorks 中國”字樣等。

  清單 4. Selenium 測試的簡單示例

  Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox",

  "http://www.google.cn");

  selenium.start(); // 啟動瀏覽器

  selenium.open("/"); // 打開 www.google

  selenium.type("q", "developerworks"); // 輸入文本框

  selenium.click("btnG");// 點擊搜索按鈕

  selenium.waitForPageToLoad("30000"); // 等待加載結果頁面

  verifyTrue(selenium.isTextPresent("developerWorks 中國")); // 驗證是否存在指定字符

  selenium.stop();// 關閉瀏覽器

  當 Selenim 遇到 TestNG

  用 Selenium 測試 Web 頁面時,所重現的各種行為依賴于測試人員的輸入參數,例如:選擇下拉餐單的項目,在文本框中輸入字符等。不同的測試用例對應不同的輸入,若有方法能夠簡單有效的傳入測試用參數,會大大提高測試用例的復用性和可維護性。當 Selenium 遇到 TestNG,這些就可以實現。TestNG 中的 NG,意為 Next Generation,事實上,該測試框架引入了不少新特性:靈活的測試配置,支持 JDK 5 注釋,支持數據驅動的測試,強大的執行模型等。

原文轉自:http://www.ibm.com/developerworks/cn/java/j-lo-selenium/index.html

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97