1. 程式人生 > >Rational Functional Tester Proxy SDK 開發,第 1 部分: Proxy SDK 概述

Rational Functional Tester Proxy SDK 開發,第 1 部分: Proxy SDK 概述

簡介:  Rational Functional Tester(RFT)是一款先進的、完全面向物件的和跨平臺的基於圖形化使用者介面的自動化測試和迴歸測試工具。RFT 可以通過 Proxy 來對 GUI 元件進行獲取和控制,而 Rational Functional Tester proxy software development kit (Proxy SDK) 正是 RFT 提供給使用者的介面,使使用者擴充套件所能被 RFT 自動化控制及支援的 GUI 元件的 Proxy 物件,從而使 RFT 指令碼開發人員在測試過程中,更好的控制被測試元件。本文為您介紹 Proxy SDK 的背景和工作原理。

Rational® Functional Tester(RFT)是一款先進的、完全面向物件的和跨平臺的基於圖形化使用者介面的自動化測試和迴歸測試工具,其支援對 Java、.Net 和 Web 應用程式視覺化元件的自動化測試,可以運行於 Windows 和 Linux 系統,並且為測試人員提供了和開發人員同樣的基於 Eclipse 的整合操作平臺。

RFT 通過 Proxy 來對 GUI 元件進行獲取和控制,而 Rational® Functional Tester proxy software development kit (Proxy SDK) 是 RFT7.0 及其以後版本提供給使用者的介面,用來擴充套件所能被 RFT 自動化控制 GUI 元件的 Proxy 物件,使得 RFT 對於 GUI 元件的獲取及控制手段更加的豐富和完善,從而方便指令碼開發人員在測試過程中,更好的控制被測試元件。

經過一段時間的使用發現,使用 Proxy SDK 擴充套件 Proxy 物件主要可以用於以下幾個方面:

  • 可以對 RFT 支援的 GUI 元件,新增識別屬性 (Property 及 Recognition Property),從而方便指令碼開發人員能夠更好的利用 RFT 識別並獲取 GUI 元件;
  • 可以改變 RFT 支援的 GUI 元件的操作方法,從而使得 RFT 對於元件的操作更加豐富多樣,以滿足不同的測試需求,
  • 可以改變 RFT 支援的 GUI 元件的驗證方法,從而使得 RFT 對於元件資料資訊的獲取手段、驗證手段更加豐富多樣,以滿足不同的測試需求。

如圖 1 中所示,當 RFT 測試指令碼開發人員在 test script 中,通過呼叫元件物件 TestObject 的方法 (methods) 對該元件進行操作的過程中,該 TestObject 會查詢到與其對應的 TestObjectProxy 物件,從而使用 TestObjectProxy 來對該 TestObject 進行獲取和操作。

因此,對於 RFT 所能支援自動化測試的每一個 GUI 元件來說,都會有相應的 Proxy 物件與之相對應。 Proxy 就類似於 RFT 與實際 GUI 元件之間的中介軟體,RFT 通過 Proxy 來獲取並控制相應的 GUI 元件。因此如果 Proxy 改變了,RFT 對於 GUI 元件的操作也將發生變化。根據這一點,就可以利用 Proxy SDK 建立新的 Proxy 物件,通過重寫並覆蓋原有 Proxy 中的方法,來實現 Proxy 功能的擴充套件,最終根據測試需要來增強 RFT 的功能,如圖 2 所示:

在 Proxy 的開發過程中,我們可以對任意一個 RFT 已支援的 GUI 元件的 Proxy 進行替換。但是需要注意的是,對於 Java 及 .NET 這兩個不同的開發平臺所開發出的 GUI 元件,其對應 Proxy 的開發環境也有所不同,具體分類如下:

  1. 對於以下 UI frameworks 必須在 Java 開發環境下,使用 Proxy SDK 來開發相應 GUI 元件的 Proxy 物件,包括:AWT、Swing、SWT、Applet ;

Proxy SDK 開發所需檔案:RFT 核心 JAR 包RATIONAL_FT_LIB

  1. 對於以下 UI frameworks 必須在 C# 開發環境下,使用 Proxy SDK 來開發相應 GUI 元件的 Proxy 物件,包括:.Net、Win32、Siebel、SAP 。

Proxy SDK 開發所需檔案:使用rtxftnet.dllWhidbeyControls.dll (../RFT/SDP70/FunctionalTest/bin/ 目錄下)

  • 如果當前使用的是 Microsoft® Visual Studio .NET2003,則需要載入 rtxftnet.dll 動態連結庫檔案;
  • 如果當前使用的是 Microsoft® Visual Studio .NET2005,則需要載入使用 WhidbeyControls.dll 動態連結庫檔案;

當指定 GUI 元件對應的 NewTestObjectProxy 建立好之後,還需要建立新的 .rftcust 對映檔案,利用該檔案建立 TestObject 與新的 Proxy 之間的對映關係,從而達到替換 GUI 元件原有 Proxy 的目的,如圖 3 所示。至於 RFT 預設的 TestObject 與 Proxy 之間的對映關係,可以檢視 RFT 目錄中 ../IBM/SDP70/FunctionalTester/bin/rational_ft.rftcust 檔案。

在 Rational® Functional Tester(RFT)實際工作中,對於每一種 RFT 可支援自動化測試的 GUI 元件,都會有一個對應預設的 Proxy 物件與之對應,從而使得 RFT 能夠對這些 GUI 進行獲取和操作。但是這些預設的 Proxy 物件往往都是獲取了 GUI 元件最基本的資訊、實現了最基本的操作。因此在實際的自動化測試過程中根據測試需求,如果需要對 GUI 元件的特殊屬性進行驗證、或是進行一些特定的操作,預設的 Proxy 物件便很難滿足需要,RFT 指令碼開發人員只能通過重複性的編寫大量的程式碼來達到測試目的。

在這種情況下 Rational® Functional Tester(RFT)提供了 Proxy SDK 這個使用者介面,其目的就是為了在使用者使用 RFT 過程中,當遇到特殊測試需求時,能夠擴充套件原有 RFT 預設的 Proxy 物件,從而使得 RFT 能夠獲取更多 GUI 元件的特殊屬性資訊,並能夠進行更多複雜的操作。為指令碼開發人員減小程式碼開發量提高工作效率。 RFT 預設 Proxy 物件與擴充套件 Proxy 物件的關係及對比如圖 4 所示:

從圖中我們很容易看出,擴充套件後的 Proxy 物件(ExtendProxyObject)是在 RFT 預設 Proxy 物件(ProxyObject)的基礎上進行的擴充套件,不僅包括 GUI 元件屬性,同時可以對原有元件的控制方法及驗證手段進行擴充套件。舉一個簡單的例子:對於任意一個矩形的 GUI 元件,RFT 預設的 Proxy 物件(ProxyObject)都可以獲取到元件的頂點的座標以及元件的大小尺寸,因此我們便可以使用 Proxy SDK 對該 Proxy 物件進行擴充套件,根據定點座標以及大小尺寸資訊,便可以計算出該元件中心點座標值,從而新增一個新的名為” CenterPoint ”、值為座標資訊的 Property 屬性到擴充套件後的 Proxy 物件(ExtendProxyObject)中,這樣當我們再次使用 RFT 獲取並操作同一類的 GUI 元件時,就可以通過名為” CenterPoint ”的 Property 屬性很容易的獲取到該元件中心點的座標。擴充套件後的 Proxy 物件中,被重寫的 getProperties() 以及 getProperty(String propertyName) 方法的程式碼片斷如下

以同樣的手段,我們也可以對 RFT 操作元件的方法進行擴充套件,例如預設 Proxy 物件在對 GUI 元件進行單擊操作時會呼叫 click() 方法,在這個過程中 RFT 預設呼叫了實現了元件的單擊操作,通過 Proxy SDK 同樣可以擴充套件 click() 方法的功能,使得該方法在執行原有 click() 方法的同時,實現多次連續點選操作,同時也可以捕捉該元件標籤、顏色等屬性的變化並新增新的 Property 屬性。從而給我們的自動化測試帶來更大的空間。在接下來的幾篇文章中,將通過幾個具體的例子來分別介紹如何使用 Proxy SDK 來豐富和完善 RFT 已有的功能。在第二篇文章中,主要介紹如何使用 Proxy SDK 擴充套件 Java GUI 元件的識別屬性;在第三篇文章中,主要介紹如何使用 Proxy SDK 擴充套件 Java GUI 元件可捕獲的驗證資料;在第四篇文章中,主要介紹如何使用 Proxy SDK 對 .NET domain 下編寫的 windows GUI 元件的 Proxy 物件進行擴充套件。