每個 Rational Functional Tester 支持的實際控件都會對應著一個代理對象(ProxyObject),但有時也會有多個不同的控件對應同一代理對象的情況,如下圖所示。出現這種情況的原因是,開發設計人員認為該代理對象提供的通用性接口已經足以覆蓋這些控件的測試需求。當然,如果用戶對某些控件有著更為細致的操控要求,可以自行拆解、拓展這一部分,使得 Rational Functional Tester 可以完成更細微的測試動作。
圖 10. 一對一、一對多的映射關系(rational_ft.rftcust 文件內容局部)
即使是在默認配置下不為 Rational Functional Tester 所支持的新界面控件,用戶也可以通過創建對應的代理對象類來拓展 Rational Functional Tester 的支持范圍。例如,為了支持 .Net 域的 .Net 2.0 DataGridView 控件,用戶可以開發一個代理類 Rational.Test.Ft.Domain.Net.DataGridViewProxy,并把它的聲明插入到 rational_ft.rftcust 文件里對應的位置。下面的代碼就是更新后的 rational_ft.rftcust 文件片段。
圖 11. 用戶定制的代理對象映射
Rational Functional Tester 實際運行場景中的交互動作
介紹了相關的眾多復雜概念后,接下來我們以最常見的錄制、回放動作為例,剖析錄制和回放的動作實質。
總體上看,錄制和回放的過程會牽涉到對象管理器、域對象、代理對象、測試上下文之間形形色色的交互。
錄制過程的交互動作詳解
下面是錄制測試步驟時,對象管理器和對象管理器代理間的動作:
定位屏幕上某處的對象。例如,proxyAtPoint 方法。
在對象圖中獲取識別屬性,或者初始化對象句柄。例如,getMappedTestObject 方法。
而對于代理對象,錄制時會調用到代理類里的以下方法:
表 1. 錄制操作所涉代理類方法列表
動作 | 調用方法 |
進程級底層事件 | processMouseEvent() |
定位拖拽動作的目標對象 | getMethodSpecForPoint() |
驗證點相關方法 |
getTestDataTypes() getTestData() getProperties() getStandardProperties() getProperty() |
對象結構相關方法 |
getMappableParent() getParent() getChildren() getMappableChildren() getOwner() getOwned() |
對象識別相關方法 |
getRecognitionProperties() shouldBeMapped() getRole() getTestObjectClassName() getRecognitionPropertyWeight() |
某個錄制動作的細節如下:
Rational Functional Tester 錄制器啟動,從對象管理器中取得當前點的代理對象;(實際動作在之后的第二步、第三步完成)
獲取所在域的頂級容器對象,返回;
在頂級容器對象的子對象里查找,得到當前點的代理對象,返回;
錄制器得到當前操作的代理對象句柄;
處理鼠標事件;
設置事件或動作細節,返回并完成錄制
圖 12. 錄制動作時序圖
(查看圖 12 大圖)
回放過程的交互動作詳解
Rational Functional Tester 使用的識別屬性值和控件層次結構來識別被測控件,這些信息被集中儲存在對象圖(Object Map)里?;胤艜r,這些信息被取出來用以選擇唯一的界面控件。在必要的時候,Rational Functional Tester 也會搜集諸如屏幕坐標,控件屬性等,連同界面控件一起,被表征為腳本端的測試對象(TestObject)。錄制時,用戶的各種點擊、雙擊或拖拽動作都是被封裝為獨立的測試對象的方法,比如 button().click(atPoint(10,10)),回放時,Rational Functional Tester 用對象圖里保存的識別屬性找到對應的按鈕型測試對象,再調用點擊方法來施加測試動作。
回放時,Rational Functional Tester 客戶端進程將請求發送到所有的測試域,在對象圖里通過錄制的可識別屬性辨識出目標對象,不同的識別結果會引發 Rational Functional Tester 不同的后續動作。
表 2. 回放操作對象查找結果及后續行為
結果 | 動作 |
未發現目標對象 | 拋出對象未發現的程序異常 |
發現多個目標對象 | 將對象查找分值和閾值比對,來確定唯一的目標對象;如果不能確定,將拋出對象不確定的程序異常。 |
發現唯一的目標對象 | 代理將啟動回放動作。例如,回放之前錄制下來的、諸如點擊的動作。 |
在識別閾值內,發現多個目標對象 | 拋出對象不確定的程序異常。 |
原文轉自:http://www.anti-gravitydesign.com