淺談RFT


RFT是什么?

RFT全稱是Rational Functional Tester,是IBM公司的一個產品。以前叫Rational XDE Tester,再早一點叫RobotJ。RFT提供了自動化測試Java程序、web應用、Eclipse以及終端應用的解決方案。它支持Windows以及Linux平台。RFT支持純Java以及VB.Net作為其自動化測試腳本,由於筆者多工作在J2EE平台,以下內容將只涉及用Java作為自動化測試腳本,但其原理同樣可以應用於VB.Net寫出來的腳本。圖表1 RFT的主界面為RFT的主界面。筆者正在使用的RFT的版本為6.1.1.1。

圖表1 RFT的主界面

2、理解RFT的對象識別

使用RFT開發自動化測試腳本的過程大致是:錄制對象映射,使用對象映射對GUI對象進行操作從而完成自動化測試。所以我們首先來理解RFT的對象識別。

2.1、對象映射文件

在 RFT里面有一類以rftxmap為后綴名的文件,這類文件被稱為對象映射文件,用於存儲被測GUI對象的識別信息。對象映射文件所包含的被測GUI對象 又可以可視化的顯示在對象映射編輯器中。雖然這類文件是文本格式的,但不能夠像普通文本文件被直接編輯。相反,應該使用錄制工具將對象加入對象映射文件 中。編輯對象的識別標准則是通過對象映射編輯器來完成。

2.2、對象映射編輯器

圖 表2所示的就是一個對象映射編輯器。從中我們可以看出,這些被錄制工具加進來的對象組成了樹形的結構。每一個對象都有相關的識別屬性。例如圖中高亮顯示的 Button對象,它的.class屬性值為javax.swing.JButton,說明這個對象是swing組件庫中的按鈕組件。它還有其他屬性。每個屬性的值后面都跟有權重值。權重值對於測試程序運行過程中對象識別非常重要。

圖表2對象映射編輯器

2.3、對象識別的過程

這 里簡單描述一下測試程序運行時對象識別的過程。假如我們在測試的過程中需要點擊圖表2中高亮顯示的對象所代表的按鈕。RFT首先需要找到按鈕所在對象樹的 根所代表的GUI對象。我們不難看出其所在對象樹的根上的對象代表了一個Java的Frame。只要啟動了正確的Java的Frame,根上的對象不難找 到。RFT將根據這棵樹的結構一步一步的找下去直到找到相應的按鈕,這樣我們就可以在程序中執行該按鈕的點擊操作,從而完成了測試中的簡單一步。由此可 見,對於這棵樹上的所有對象的識別都是重要的,只要其中一個識別不出來,那么按鈕最終也找不到。而RFT在識別GUI對象的過程中將根據一個算法來決定該 對象是否符合識別標准。這個算法就用到了識別權重值。

2.4、對象識別算法

還 是以按鈕對象為例說明這個算法。從圖中可以看出,按鈕對象有三個屬性的識別權重值大於零。我們假設其他屬性權重值為0。假設RFT以對象樹的順序找下來, 最后發現了3個候選對象。其中有兩個.class屬性不是javax.swing.JButton,這兩個對象的識別分數至少為100(識別權 重)*100(用於計算識別分數用的倍數)=10000,而如果識別閥值(此為系統參數)為10000的話,這兩個對象將被認為不匹配對象映射。而第三個 對象的屬性值如果全部符合,它的識別分數為0,小於10000,匹配成功。

2.5、調整對象識別

當對象加入到對象映射庫以后,RFT將會為該對象建立默認的識別屬性和識別權重值。如果在測試腳本運行過程中發生識別失敗。可以通過以下方法進行調整:

  • 修改識別權重;
  • 添加或刪除識別屬性。如按鈕的例子,用於識別的屬性有3個,可以通過添加其他識別屬性來縮小對象識別的范圍;
  • 修 改識別屬性的值。有的屬性是字符型,且每一次測試都有可能發生變化,這時候可以找到這種變化的規律,用正則表示式的方式來表達這個屬性的值。如按鈕的例 子,有一個屬性名叫accessibleContext.accessibleName,它的值為”OK”,我們把該值改為”*OK*”,在測試腳本運行 過程中,即使碰到”abcOKabc”這樣的值也可以實現匹配。

2.6、動態對象識別

除 了基於映射的識別模式外,RFT還提供了動態對象識別的功能,該功能是通過定義在RationalTestScript and TestObject中find()方法完成的。雖然大部分測試小組只需要使用基於映射的對象識別方法,但是find()可能在以下幾種特別的情況下是必 需的。

  • 識別動態對象。有的對象在運行過程中是動態變化的,把這些對象加到對象映射沒有意義。
  • 支持多語言測試。
  • 測試那些不穩定的或對象映射樹太深的應用。

筆者曾經見過一個測試小組,根本不用RFT提供的對象映射文件,而全部用動態對象識別功能,它需要測試人員把對象識別屬性寫到配置文件中。這樣一來,它甚至可以脫離RFT的開發環境,而只需要Eclipse便可以開發測試腳本。

3、理解IBM的框架

在IBM內部已經開發出一套框架。有了這套框架可以為你的自動化測試項目提供以下幫助:

  • 加速腳本編寫;
  • 快速調試以及易於維護;
  • 代碼重用;
  • 很好的組織腳本文件;
  • 幫助協作;
  • 從他人經驗得到益處;

這套框架由以下三個部分組成:通過appobjects,tasks以及testcases來實現三層架構;ibm工具包;以及配套的最佳實踐。下面將介紹這套框架,其中ibm工具包雖然很有用處,但IBM並沒有正式發布,所以本文將不提及。

3.1、appobjects, tasks, and testcases包

IBM 的框架建議將測試腳本分為三類appobjects, tasks, and testcases,進而將腳本分別放在appobjects, tasks, and testcases包中。這三類腳本存在這樣依賴關系testcases->tasks->appobjects。如圖表3所示,形成了一個 三層架構。下面分別介紹每一層的作用。

圖表3三層架構

Appobjects用於存儲關於應用程序GUI元素的信息。在appobjects里面你將寫一些getter方法,這些getter方法返回對象給調用者,這些對象將用於查詢和操作GUI元素。一般,這些getter方法將在tasks層調用。

Tasks用於寫一些可重用的方法,這些方法將對應用程序執行一些操作。如果需要操作和查詢復雜的特定於某應用程序的控件,也可以寫在tasks的方法中。Tasks包里的方法將被testcases調用。

Testcases便是最終的測試用例。它們將操作應用程序、驗證其狀態以及記錄下結果。

下面是tasks的例子:

下面是testcases的例子:

3.2、IBM的最佳實踐

  • 用私有的而不是共享的對象映射;
  • 使用.properties文件來支持國際化;
  • 使用腳本驗證,而不是驗證點。如:

if (boolean test passes)

log passing result

else log failing result

  • 遵守java命名規范,變量、類的命名要有一定意義。

4、總結

RFT作為一款GUI自動化測試工具具有以下(但不僅限於)特點:

  • 支持以Java語言作為其自動化測試腳本

這個特點不但使得RFT秉承了Java的諸多優點,且使得RFT的開發人員很容易的引入各種Java組件:Spring Framework、Hibernate等等,我們還可以使用了開源工作流引擎OBE來實現測試腳本中流程邏輯的外部化。

  • 以Eclipse(IBM開源IDE)插件的方式來提供其功能,這對於熟悉Eclipse的人來說,將比較容易上手。

而如果引入IBM的框架,則可以進一步幫助測試小組快速構建自動化測試腳本並提高其可維護性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM