淺談RFT

RFT是什麼?java

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。web

圖表1 RFT的主界面
算法

二、理解RFT的對象識別

使用RFT開發自動化測試腳本的過程大體是:錄製對象映射,使用對象映射對GUI對象進行操做從而完成自動化測試。因此咱們首先來理解RFT的對象識別。架構

2.一、對象映射文件

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

2.二、對象映射編輯器

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

圖表2對象映射編輯器編輯器

2.三、對象識別的過程

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

2.四、對象識別算法

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

2.五、調整對象識別

當對象加入到對象映射庫之後,RFT將會爲該對象創建默認的識別屬性和識別權重值。若是在測試腳本運行過程當中發生識別失敗。能夠經過如下方法進行調整:spa

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

2.六、動態對象識別

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

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

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

三、理解IBM的框架

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

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

這套框架由如下三個部分組成:經過appobjects,tasks以及testcases來實現三層架構;ibm工具包;以及配套的最佳實踐。下面將介紹這套框架,其中ibm工具包雖然頗有用處,但IBM並無正式發佈,因此本文將不說起。

3.一、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.二、IBM的最佳實踐

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

if (boolean test passes)

log passing result

else log failing result

  • 遵照java命名規範,變量、類的命名要有必定意義。

四、總結

RFT做爲一款GUI自動化測試工具具備如下(但不只限於)特色:

  • 支持以Java語言做爲其自動化測試腳本

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

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

而若是引入IBM的框架,則能夠進一步幫助測試小組快速構建自動化測試腳本並提升其可維護性。

相關文章
相關標籤/搜索