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