● Selenium IDE:Selenium-IDE 是快速開發 Selenium 測試用例的 Firefox 插件工具。可以利用它錄制用戶的基本操作,生成測試用例腳本,還可以將這些測試用例轉化為其他編程語言的自動化測試腳本。通過點擊回放按鈕,可以回放錄制的測試用例腳本。該工具還包含一個上下文菜單,測試工程師可以使用它從瀏覽器的當前顯示頁面選擇頁面元素,然后可以選擇適配已選取元素的帶預定義參數的 Selenium 命令來快速完成腳本編寫。這一特性為自動化測試人員節省了花費在腳本編寫上的時間、也提供了學習 Selenium 命令的快捷方法。
● Selenium Grid:Selenium Grid用于在不同的機器系統上、不同的瀏覽器上并行運行自動化測試。利用 Selenium Grid,可以輕松創建分布式自動化測試環境
下面,我們將會使用 JUnit4 和 Selenium Server 演示如何對前文提到的測試用例編寫自動化測試腳本。準備項目依賴的 Jar 文件,如 Selenium、dom4j 等 Jar 包,啟動 Eclipse 集成開發環境,創建項目名稱為 SeleniumDemo 的 Java 項目,并創建一個 JUnit 4 單元測試類:dw.junit. DWloginJUnit.java,依次編寫 @BeforeClass、@Test 、@AfterClass 方法。本文提供源代碼下載,您可自行下載,導入到自己的 Eclipse 開發工作區。首先,創建 Selenium 實例,啟動瀏覽器,使瀏覽器窗口大化,打開要訪問的谷歌網站。代碼如下:
清單 1. 創建初始化 Selenium 實例
private static Selenium selenium;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*iexplore",
http://www.google.com/);
System.out.println("正在啟動 Selenium。。。");
selenium.start();
selenium.windowMaximize();
selenium.open("/");
}
然后在測試方法中實現演示用例,即在谷歌站點搜索輸入框輸入“ibm developerworks cn”,然后點擊搜索按鈕,后截圖。Pause 和 captureScreenshot()方法在本文附帶的源代碼文件中可查。執行用例部分的代碼清單如下:
清單 2. 執行用例的程序代碼
@Test
public void test() {
// 在 Google 查詢輸入框,輸入 ibm developerworks cn
String queryString="ibm developerworks cn";
selenium.type("//input[@name='q']", queryString);
pause(1000);
// 單擊查詢按鈕,執行查詢
selenium.click("//input[@name='btnK']");
pause(1000);
System.out.println("獲取的頁面標題:"+selenium.getTitle());
pause(2000);
SeleneseTestBase.assertTrue(selenium.getTitle().contains(
queryString));
// 測試截圖函數
captureScreenshot("截圖測試 JUnit");
}
后,執行用例完畢后調用 tearDownAfterClass() 方法銷毀 Selenium 實例。
清單 3. 銷毀 Selenium 實例
@AfterClass
public static void tearDownAfterClass() throws Exception {
if(selenium != null){
System.out.println("停止 Selenium !");
selenium.stop();
}
}
我們來演示如何執行這個單元測試類:先打開一個命令行窗口,并切換到 Selenium Server Jar 文件所在的目錄,運行 java -jar selenium-server-standalone-2.{ 版本號 }.{ 修訂版本號 }.jar 來啟動 Selenium Server。在 Eclipse 工作區,右鍵選擇 dw.junit.DWloginJUnit.java,選擇 Run as — JUnit Test 來運行單元測試類。可以看到,瀏覽器自動啟動起來,訪問谷歌查詢引擎主頁,在搜索框自動輸入了“ibm developerworks cn”,并點擊查詢按鈕進行了查詢。在 Eclipse 的 JUnit 視圖,可以看到顯示代表執行成功的綠色圖標,在 SeleniumDemo 項目的根目錄下生成了一個 png 格式的谷歌查詢結果頁面的截圖文件。
自動化測試框架開發人員如何做
我們上文實現了演示用例的自動化回歸測試,很多公司的測試工程師也是用這樣的方法執行自動化測試的,但這不是好的方法。理由如下:
1、如果用例發生變更,比如界面的美化重構導致頁面的某一控件元素信息變化,不得不修改 Java 腳本代碼,重新編譯打包。
2、擅長業務的測試人員很大一部分還是不熟悉 Java 編程的,他們期望有一種不需要編程的測試框架,這樣他們可以根據對業務的把握,快速編寫自動化測試用例腳本。
目前市場上還沒有自動化測試工具可以直接識別傳統的測試用例,繼而直接執行自動化測試。也是說,現在還沒有工具可以讀取像“用戶名輸入框”這樣的純文字性描述內容,然后映射到頁面上的輸入框控件。那么,如何添加一些額外的信息到傳統的用例里面,從而使自動化工具能執行業務測試人員寫的這些用例呢?
先分析一下 Web 應用的測試用例及其測試步驟,顯而易見,都包含下述幾部分:Web 頁面控件部分、用戶執行動作部分、測試數據部分等。比如,演示用例中提到的用戶輸入框、密碼輸入框和登錄按鈕屬于 Web 頁面控件,動詞輸入、點擊等屬于用戶執行動作,用戶名和密碼數據屬于測試數據。我們需要把這幾部分都添加額外信息、轉化為測試工具能識別的形式。測試工具都提供定位 Web 頁面控件的方式,以 Selenium 為例,它可以通過 CSS、JS 和 XPath 定位控件,方式非常豐富。用戶執行動作對應著測試工具的應用編程接口 API,測試工具都提供類似單擊 Click、雙擊 DoubleClick、拖拽 DragAndDown、輸入數據 Type 等動作的 API。頁面控件信息和測試數據對應著 API 的參數列表。比如,selenium.type(“//input[@id= ’ username ’ ]”,”我的用戶名”)。