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