程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Rational >> 采用Rational Functional Tester 8.0實現Eclipse以及GEF的自動化測試

采用Rational Functional Tester 8.0實現Eclipse以及GEF的自動化測試

編輯:Rational

Rational Functional Tester(RFT)8.0 版本強化了基於 Eclipse 的應用系統的自動化測試功能,更是增加了對於 GEF(Graphical Editor Framework)對象的支持。本文立足 Eclipse 的窗口構件集合,重點介紹如何配置 RFT 的 Eclipse 應用,如何針對 Eclipse 的構件進行動態的查找,以及 GEF 對象的配置和測試。

一、概述

IBM Rational Functional Tester 是先進的自動化測試工具,使測試人員和 GUI 開發人員更好的控制對應用程序的測試。RFT 既支持 Web 應用程序的自動化測試,同時也支持 Eclipse 應用程序的自動化。8.0 版本除了對 Web 的支持外,又強化了對 Eclipse 平台的支持,尤其是增加了 GEF 對象識別的功能,這大大滿足了業界對於 Eclipse 應用程序自動化測試的強烈需求。

RFT 為 Eclipse 應用程序專門提供了配置面板,並要求指定 Eclipse 運行程序的文件夾路徑,針對不同的 Eclipse 應用程序需要單獨配置其 Eclipse 平台屬性,否則 RFT 無法識別此應用程序中的控件,本文的第二章將對配置的具體步驟進行詳細介紹。

配置好 Eclipse 平台屬性後,緊接著本文的第三章基於 Eclipse 窗口部件的類型結構,深入解析 Eclipse 窗口部件與 RFT 測試對象間的映射關系,以及如何應用這種映射關系編寫 Eclipse 窗口部件的動態查找方法。

GEF (Graphical Editor Framework) 是基於 Eclipse 的圖形化編輯框架,RFT 在 Eclipse 平台屬性配置面板開放了 GEF 的可選配置項,本文的第四章將針對其配置以及具體應用進行詳細介紹。

二、配置 Eclipse 平台屬性

為了使得 RFT 識別 Eclipse 對象,需要預先在 RFT 中配置被測應用程序屬性,以及 Eclipse 平台屬性。

配置被測應用程序屬性

首先進入應用程序配置窗口(Application Configure Tool),如圖 1,點擊工具欄中的配置按鈕 (Configure),並選擇配置被測應用程序選項(Configure Application for Testing),從而打開配置界面。

圖 1. 應用程序配置窗口

然後選擇被測程序的類型。點擊添加按鈕(Add)添加被測應用程序,可以看到四類被測程序:

Java 應用程序(Java Application):.class 文件或者 .jar 文件

HTML 應用程序(HTML Application):.html 文件或者 URL 地址

可執行或者批處理文件(Executable or Batch File):.exe 或者 .bat 文件

Flex 應用程序(Flex Application)

基於 Eclipse 的應用程序是可執行文件,因此選擇可執行或者批處理選項,如圖 2。

圖 2. 選擇程序類型

最後選擇被測應用程序的路徑,添加完成後,可以看到在應用程序配置頁面的左側面板中被測應用程序已經顯示其中,右側面板則詳細列出應用程序的名稱、路徑、文件類型等屬性信息。點擊運行按鈕(Run),則可以測試添加的應用程序是否能正常啟動。

配置好被測應用程序,測試人員就可以在腳本內部調用 StartApp() 方法任意啟動被測程序,這在很大程度上增強了 RFT 與被測程序的交互性,同時避免了事先啟動測試程序的步驟,從而給測試人員帶來了方便。

配置 Eclipse 平台屬性

點擊工具欄中的配置按鈕選擇啟用測試環境選項(Enable Environment for Testing),如圖 3。可配置的環境屬性包括 Web 浏覽器(Web Browsers)、Java 環境(Java Environments),以及 Eclipse 平台(Eclipse Platforms)。

圖 3. Eclipse 平台屬性配置窗口

選擇 Eclipse 平台標簽。如果明確 Eclipse 平台的位置,則直接點擊添加按鈕(Add),並指定所在的文件夾路徑;或者應用搜索(Search)功能檢索某一路徑下面的所有 Eclipse 平台,檢索出的結果會被自動添加到左邊的 Eclipse 平台列表中。

激活 Eclipse 平台。從左側 Eclipse 列表中選擇被測平台,點擊激活按鈕(Enable),激活 Eclipse 平台後,RFT 理論上就可以識別上面的對象了。

重啟被測應用程序,在 RFT 中配置完 Eclipse 平台屬性後,需要重啟被測應用程序,這樣 RFT 的 Eclipse 對象識別系統才能夠生效。

判斷 Eclipse 平台是否被激活。打開測試對象監測窗口(Test Object Inspector,如圖 4),並將鼠標定位在被測 Eclipse 應用程序上,如果檢測窗口中顯示對象的屬性層次結構,那就說明 Eclipse 平台被成功激活;否則,說明配置沒有生效或者是路徑設置錯誤,需要重啟被測應用程序,或者重新配置平台屬性。

圖 4. 測試對象監測按鈕

三、動態查找 Eclipse 對象

IDE-eclipse 是基於 SWT(Standard Widget Toolkit)開發的,SWT 應用程序的基本組成部分為顯示界面(Display)、命令界面(Shell)和窗口部件(Widgets)。窗口部件反映了主機操作系統上提供的 GUI 組件,RFT 通過獲取窗口部件的類型來識別被測對象,從而進行自動化測試。

基於 SWT 應用的窗口部件(org.eclipse.swt.widgets)

熟練掌握窗口部件的類型可以在很大程度上提高動態識別對象的效率,圖 5 顯示了基於 Eclipse 的窗口部件層次結構樹。( 注:由於篇幅的原因,圖 5 中的 Eclipse 窗口部件層次結構樹已經做過刪節,完整的結構樹請參閱 Eclipse API 的官方網站。)

Control: 與操作系統控件對應的窗口部件,比如按鈕,鏈接,標簽,進度條等。

Composite: 包括其他控件的窗口部件,比如樹,組,表格,工具條等。

Item: 被其他控件包含的窗口部件,比如菜單項,表格欄,樹結點等。

圖 5. 窗口部件繼承關系樹

RFT 提供的測試對象監測器可以快速捕獲被測對象的 SWT 窗口部件類型,及其層次結構屬性。圖 6 是一個基於 Eclipse 平台的應用程序的工具欄示例,圖 7、圖 8 顯示了 RFT 測試對象監測器捕獲到的窗口部件類型及其部分屬性,示例上方 File 的類型是 MenuItem(如圖 7),示例下方 Case Creation 的類型是 ToolBar(如圖 8)。

圖 6. 選擇測試類型和測試腳本

圖 7. MenuItem 對象

圖 8. ToolBar 對象

SWT 窗口部件與 RFT 測試對象間的映射

SWT 窗口部件與 RFT 測試對象並不是一一對應的關系,所有的窗口部件都可以看做是統一的圖形用戶界面測試對象(GuiTestObject),具體又細分為以下幾種類型:

DocumentTestObject: HTML 浏覽器測試對象

EmbeddedBrwoserTestObject: 嵌入式浏覽器測試對象

FrameTestObject: 框架測試對象

GefEditPartTestObject: 基於 GEF 應用系統的可編輯測試對象

ScreenTestObject: 顯示器屏幕測試對象

ScrollTestObject: 水平和垂直滾動條測試對象

StatelessGuiSubitemTestObject: 由鼠標或者鍵盤觸發動作的測試對象

SubitemTestObject: 必須通過編程控制的測試對象

TabitemTestObject: 標簽測試對象

TextGuiTestObject: 文本測試對象

ToggleTestObject: 切換按鈕測試對象

這些類型除了包含繼承自 GuiTestObject 的公共方法外,還針對各自類型的特殊操作提供了專門的方法,其中的一些類型又可以進一步細分,如圖 9。( 注:由於篇幅的原因,圖 9 中的 GuiTestObject 層次結構樹已經做過刪節,完整的結構樹請參閱 RFT API 的官方網站。)

圖 9. 圖形用戶界面測試對象繼承關系樹

往往一種類型的 RFT 測試對象對應多種類型的 SWT 窗口部件,比如 GuiSubitemTestObject 對應的窗口部件有 widgets.Menu,widgets.TabFolder,widgets.ToolBar 等等,而 ScrollGuiSubitemTestObject 對應的窗口部件包括 widget.Tree,widget.Table 等等。之所以會有這種一對多的映射關系,是因為很多不同類型的 SWT 窗口部件往往對應類似的操作,而 RFT 測試對象正是一系列圖形用戶界面的操作集合,因此一類 RFT 測試對象就會對應多類 SWT 窗口部件。

另外一方面,由於 RFT 測試對象本身的繼承關系,一個類型的 SWT 窗口部件也對應多個類型的 RFT 測試對象,比如說 widgets.Menu 類型的部件,即對應 GuiSubitemTestObject,同時也可將其看作是 GuiSubitemTestObject 的父類型—StatelessGuiSubitemTestObject,GuiTestObject,以及 TestObject。

在實際開發自動化測試腳本時,我們很難精確的判斷 RFT 測試對象與 SWT 窗口部件的映射,因此可以借助 RFT 提供的測試對象屬性表來查看。

以圖 7 中的 File 部件為例,首先將被測 SWT 窗口部件捕獲到 RFT 的測試對象地圖中,如圖 10。

圖 10. 插入 GUI 對象到測試對象地圖

在腳本導航視圖的測試對象列表中(如圖 11),雙擊捕獲到的 File 部件,從而打開測試對象地圖。

圖 11. 腳本導航視圖

在測試對象地圖的 Recognition 標簽中,顯示了 File 部件的 SWT 窗口部件類型為 org.eclipse.swt.widgets.MenuItem(如圖 12)。切換到 Administration 標簽,可以看到 File 部件對應的 RFT 測試對象類型為 GuiTestObject(如圖 13)。

圖 12. File 部件的 SWT 窗口部件類型

圖 13. File 部件的 RFT 測試對象類型

有了 SWT 窗口部件與 RFT 測試對象間的映射,我們就可以依據這個關系來編寫動態的 Eclipse 對象查找方法。

根據映射關系,動態識別 Eclipse 對象

在上一節中我們詳細介紹了 SWT 窗口部件與 RFT 測試對象間的映射關系,以及如何應用 RFT 提供的地圖功能來確定這種映射關系。有了這個映射關系為基礎,同時結合其他的對象屬性,就很容易為 Eclipse 對象編寫動態的查找方法。

代碼清單 1 是一段動態查找方法示例,用於動態查找用戶界面上的所有類型為 MenuItem 的 Eclipse 對象。find() 方法是 RFT 提供的對象查找方法,其默認返回類型為 TestObject,org.eclipse.swt.widgets.MenuItem 作為對象查找條件。由於默認返回類型 TestObject 僅提供有限的操作方法,不能滿足 MenuItem 需要的一些操作,因此最後采用下溯的方法令其返回其實際映射的 RFT 類型—GuiTestObject。

清單 1. 動態查找 MenuItem 類型的對象

public GuiTestObject[] findChildMenuItem(){
TestObject[] menuItems = find(atChild(".class", "org.eclipse.swt.widgets.MenuItem"));
return (GuiTestObject[]) menuItems;
}

根據映射關系來編寫動態查找方法的好處是,返回的測試對象可以調用滿足實際窗口部件類型需要的操作。比如說 Text 類型的窗口部件,它映射的 RFT 測試對象類型為 TextScrollTestObject,而 TextScrollTestObject 類型提供了 getText()、setText 這些滿足 Text 窗口部件操作需求的方法。而如果采用默認的 TestObject 類型,那麼很多部件操作是無法被滿足的。

四、GEF 的自動化測試

GEF (Graphical Editor Framework) 是基於 Eclipse 平台的圖形化編輯框架,是構建在 SWT 之上的一個工具。當前的很多的主流建模工具都是基於 Eclipse GEF 開發的,比如 Rational Software Modeler。因此 RFT8.0 在 7.0 的基礎上擴展了對 GEF 的支持,增加了諸如 GefEditPartTestObject、PaletteGuiSubitemTestObject 等的專門為 GEF 控件設計的測試對象類型。

配置擴展 GEF 屬性

為了擴展對 GEF 的支持,RFT 在 Eclipse 平台屬性配置窗口設置了 GEF support 選項。當被測系統包含 GEF 控件時,首先勾選上此選項,然後再點擊 Enable 按鈕激活(如圖 14),應用設置後,RFT 就能識別 GEF 的控件對象了。

圖 14. 配置 GEF 屬性

GEF/GMF 應用程序的自動化測試實例

圖 15 是一個典型的 GEF Palette 控件,我們用 RFT 抓取這個 Palette 來查看其具體的 GEF 類型(圖 16),和其對應的 RFT 測試對象類型(圖 17)。

圖 15. Palette 控件示例

圖 16. 示例的 GEF 類型

圖 17. 示例的 RFT 測試對象類型

根據 GEF 類型和 RFT 測試對象類型的映射關系,就能參考第三章第三節的內容,編寫動態的對象查找方法,如代碼清單 2。如果想精確定位某一個 Palette 對象,除了 GEF 類型外,還可以結合其他的屬性共同作為對象查找條件,比如說示例中的 .classIndex,type 等屬性,如代碼清單 3 所示。關於如何結合多個屬性,或者是對象層次結構來動態查找對象,很多文章都有所介紹,本文就不再贅述。

清單 2. 動態查找 Palette 類型的對象

public PaletteGuiSubitemTestObject[] findChildPalettes(){
TestObject[] palettes = find(atChild(".class", "org.eclipse.gef.palette.PaletteRoot"));
return (PaletteGuiSubitemTestObject[]) palettes;
}

清單 3. 多屬性動態查找 Palette 類型的對象

public PaletteGuiSubitemTestObject findDesPalette(){
TestObject[] palettes = find(atDescendant(".class",
"org.eclipse.gef.palette.PaletteRoot", "type", "Palette_Root"));
if(palettes == null || palettes.length<1){
return null;
}
return (new PaletteGuiSubitemTestObject(palettes[0]));
}

五、總結

Rational Functional Tester 8.0 強化了對基於 Eclipse 的應用系統的自動化測試功能,更是增加了是對於 GEF(Graphical Editor Framework)對象的支持,這些都可以在 Eclipse 平台屬性配置窗口進行配置。同時,Rational Functional Tester 提供的對象地圖可以幫助確定 SWT 窗口部件 /GEF 控件類型與 RFT 測試對象間的映射關系,為腳本開發人員編寫動態查找方法提供了方便。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved