Rational Functional Tester 進程通訊模型里的每一個進程都需要借由測試上下文(TestContext)對象來管理它的進程間通訊的調用和請求。Rational Functional Tester 客戶端進程會和多個被測應用程序(AUT)進程交互,以 Rational Functional Tester 回放時的客戶端 Find 進程為例,它會和所有的被測應用程序進行通訊來確定被尋找的控件對象。但在同一時間里,每個被測應用程序進程只能和唯一的 Rational Functional Tester 客戶端進程交流。
對象管理器(ObjectManager)處理所有服務器端的進程通訊,以及與被測程序交互的元動作。對象管理器會有多個代理(Agent),每個對象管理器代理負責一類測試上下文對象的相關元動作。
在測試上下文(TestContext)對象里,域(TestDomain)對象是用于管理與它相關的特定通訊。例如,對于被測應用的瀏覽器進程,一個 HTML 測試上下文對象和一個 Java 域對象會被創建,因為瀏覽器里包含了隸屬于 HTML 域的 HTML 元素,以及隸屬于 Java 域的 Java Applets。
而在域(TestDomain)對象里,代理對象(ProxyObject)的作用是管理控件一級的通訊。它被 Rational Functional Tester 創建出來,用以和控件通訊,來操縱它們完成指定的功能測試動作。代理對象和被測應用程序的控件間有著一一對應的關系,任何控件間的交互都是通過代理對象這一媒介來達成。比如,各種不同類型的按鈕分別會映射到不同的代理對象。
注:上下文對象,對象管理器,域對象和代理對象都是創建在被測應用程序進程里。
Rational Functional Tester 代理結構
Rational Functional Tester 與被測應用程序控件的交互,有兩個必不可少的要素:代理對象(ProxyObject)和測試對象(TestObject)。代理對象包裹著實際的被測應用程序控件,測試對象則是該控件在腳本層面的展現,兩者遙相呼應,傳遞測試的動作和信息。
圖 6. Java 代理對象結構圖
注:為節約篇幅,這里僅以Java域的內容作介紹,.Net域的情況也大致相似。
通過代理對象進行交互
代理對象(Proxy objects)有些類似于實際圖形界面控件的包裹類。Rational Functional Tester 與被測應用程序并不發生直接接觸,任何與被測應用程序的通訊都需要對應的代理對象。代理對象創建后,被放置于被測控件能夠訪問并獲取信息的地方。代理類可以用 Java 語言或者 C# 語言來開發,來實現規定的 Rational Functional Tester 與被測應用程序界面控件通訊的接口。
當您的應用程序實施了前文所提到“啟用被測應用程序”操作后,它對應的代理類就會被加載到應用程序,成為被測應用程序的一部分。代理對象包裹著實際 GUI 測試對象(原生對象),使得它們可以被 Rational Functional Tester 識別和測試。以 HTML 程序為例,HTML 應用程序的瀏覽器被啟用后,瀏覽器及其 HTML 控件的代理類都會被加載到瀏覽器中。對于 Windows Internet Explorer 瀏覽器,“啟用被測應用程序”則會把 Internet Explorer 瀏覽器相關的代理類——瀏覽器輔助對象(Browser Helper Object)RTXIEEnabler.dll 文件作為第三方插件裝入 Internet Explorer 瀏覽器插件集,RTXIEEnabler.dll 在啟動后還將加載另外兩個文件 rtxivsys.dll 和 rtxiedomain.dll,并與它們共同負責 Rational Functional Tester 和 HTML 被測程序間的交互行為。( 該過程和木馬病毒的工作原理類似 )
另外,Rational Functional Tester 設計領先、開放靈活的架構允許用戶可以創建新的 ProxyObject 類,或拓展某個現有的 ProxyObject 類來支持新的界面控件。
通過測試對象進行的交互
測試對象(TestObject)是被測對象控件的腳本端接口,界面控件在自動測試腳本里會表現為測試對象。例如,一個按鈕控件被表述為 GuiTestObject,頂級容器對象如對話框或者框架控件被表述為 TopLevelTestObject。
測試對象(TestObject)方法的執行需要通過相應的代理對象(ProxyObject),測試對象駐留在 Rational Functional Tester 客戶端,它擁有指向被測應用程序的代理對象的句柄。
圖 7. 測試對象和代理對象間的交互
Rational Functional Tester 對于每個支持的測試環境都已經提供了域對象,如 Java,HTML,.Net 等,并且在每個域里,還提供了所支持的各種被測應用程序控件的代理對象(ProxyObject)類。代理對象類與被測應用程序控件之間的映射關系被保存在 Rational Functional Tester 的安裝路徑下的可定制文件里,Rational Functional Tester 通過這些可定制信息來確定對于某種被測控件該使用哪種合適的代理對象。
注:被測控件和代理對象間的映射關系主要保存在文件C:\Program Files\IBM\SDP\FunctionalTester\bin\rational_ft.rftcust里。在相同路徑下,還存有其他領域的,以及擴展的rftcust定制文件。
圖 8. rftcust 定制文件
圖 9 是打開后的 rational_ft.rftcust 文件,內容以 XML 格式展示,層次清晰,條理分明。大家可以看到代理管理器(ProxyManager)下轄五類測試域的代理對象,分別是 Java、HTML, .Net, Win 和 ActiveX。展開的 ActiveX 部分里還可以看見映射關系的細節:該領域的 DispHTMLObjectElement 控件對應著 Rational Functional Tester 提供的 Rational.Test.Ft.Domain.ActiveX.IEHtmlObjectElementProxy 類,自動測試腳本將通過這個類來操控 DispHTMLObjectElement 控件上的各種動作,完成既定測試。
圖 9. rational_ft.rftcust 文件內容局部
原文轉自:http://www.anti-gravitydesign.com