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
使用RFT開發自動化測試腳本的過程大體是:錄製對象映射,使用對象映射對GUI對象進行操做從而完成自動化測試。因此咱們首先來理解RFT的對象識別。架構
在 RFT裏面有一類以rftxmap爲後綴名的文件,這類文件被稱爲對象映射文件,用於存儲被測GUI對象的識別信息。對象映射文件所包含的被測GUI對象 又能夠可視化的顯示在對象映射編輯器中。雖然這類文件是文本格式的,但不可以像普通文本文件被直接編輯。相反,應該使用錄製工具將對象加入對象映射文件 中。編輯對象的識別標準則是經過對象映射編輯器來完成。app
圖 表2所示的就是一個對象映射編輯器。從中咱們能夠看出,這些被錄製工具加進來的對象組成了樹形的結構。每個對象都有相關的識別屬性。例如圖中高亮顯示的 Button對象,它的.class屬性值爲javax.swing.JButton,說明這個對象是swing組件庫中的按鈕組件。它還有其餘屬性。每一個屬性的值後面都跟有權重值。權重值對於測試程序運行過程當中對象識別很是重要。框架
這 裏簡單描述一下測試程序運行時對象識別的過程。假如咱們在測試的過程當中須要點擊圖表2中高亮顯示的對象所表明的按鈕。RFT首先須要找到按鈕所在對象樹的 根所表明的GUI對象。咱們不難看出其所在對象樹的根上的對象表明了一個Java的Frame。只要啓動了正確的Java的Frame,根上的對象不難找 到。RFT將根據這棵樹的結構一步一步的找下去直到找到相應的按鈕,這樣咱們就能夠在程序中執行該按鈕的點擊操做,從而完成了測試中的簡單一步。由此可 見,對於這棵樹上的全部對象的識別都是重要的,只要其中一個識別不出來,那麼按鈕最終也找不到。而RFT在識別GUI對象的過程當中將根據一個算法來決定該 對象是否符合識別標準。這個算法就用到了識別權重值。工具
還 是以按鈕對象爲例說明這個算法。從圖中能夠看出,按鈕對象有三個屬性的識別權重值大於零。咱們假設其餘屬性權重值爲0。假設RFT以對象樹的順序找下來, 最後發現了3個候選對象。其中有兩個.class屬性不是javax.swing.JButton,這兩個對象的識別分數至少爲100(識別權 重)*100(用於計算識別分數用的倍數)=10000,而若是識別閥值(此爲系統參數)爲10000的話,這兩個對象將被認爲不匹配對象映射。而第三個 對象的屬性值若是所有符合,它的識別分數爲0,小於10000,匹配成功。測試
當對象加入到對象映射庫之後,RFT將會爲該對象創建默認的識別屬性和識別權重值。若是在測試腳本運行過程當中發生識別失敗。能夠經過如下方法進行調整:spa
除 了基於映射的識別模式外,RFT還提供了動態對象識別的功能,該功能是經過定義在RationalTestScript and TestObject中find()方法完成的。雖然大部分測試小組只須要使用基於映射的對象識別方法,可是find()可能在如下幾種特別的狀況下是必 需的。
筆者曾經見過一個測試小組,根本不用RFT提供的對象映射文件,而所有用動態對象識別功能,它須要測試人員把對象識別屬性寫到配置文件中。這樣一來,它甚至能夠脫離RFT的開發環境,而只須要Eclipse即可以開發測試腳本。
在IBM內部已經開發出一套框架。有了這套框架能夠爲你的自動化測試項目提供如下幫助:
這套框架由如下三個部分組成:經過appobjects,tasks以及testcases來實現三層架構;ibm工具包;以及配套的最佳實踐。下面將介紹這套框架,其中ibm工具包雖然頗有用處,但IBM並無正式發佈,因此本文將不說起。
IBM 的框架建議將測試腳本分爲三類appobjects, tasks, and testcases,進而將腳本分別放在appobjects, tasks, and testcases包中。這三類腳本存在這樣依賴關係testcases->tasks->appobjects。如圖表3所示,造成了一個 三層架構。下面分別介紹每一層的做用。
Appobjects用於存儲關於應用程序GUI元素的信息。在appobjects裏面你將寫一些getter方法,這些getter方法返回對象給調用者,這些對象將用於查詢和操做GUI元素。通常,這些getter方法將在tasks層調用。
Tasks用於寫一些可重用的方法,這些方法將對應用程序執行一些操做。若是須要操做和查詢複雜的特定於某應用程序的控件,也能夠寫在tasks的方法中。Tasks包裏的方法將被testcases調用。
Testcases即是最終的測試用例。它們將操做應用程序、驗證其狀態以及記錄下結果。
下面是tasks的例子:
下面是testcases的例子:
if (boolean test passes)
log passing result
else log failing result
RFT做爲一款GUI自動化測試工具具備如下(但不只限於)特色:
這個特色不但使得RFT秉承了Java的諸多優勢,且使得RFT的開發人員很容易的引入各類Java組件:Spring Framework、Hibernate等等,咱們還可使用了開源工做流引擎OBE來實現測試腳本中流程邏輯的外部化。
而若是引入IBM的框架,則能夠進一步幫助測試小組快速構建自動化測試腳本並提升其可維護性。