本文內容包括: |
IBM® Rational® Functional Tester 為測試人員提供了一個測試對象識別框架以及一個簡單的用戶界面,以執行基于 GUI 的測試腳本。但是,在有些條件下,例如測試一個基于 Eclipse 的程序,您可能會發現測試的 GUI 中全是二義性情形的測試對象。這些對象擁有幾乎一樣的屬性,只有輕微的差異。很難直接指定目標對象屬性的模式以及識別對象。識別的結果可能包含有多個二義性的類似對象,從而導致識別失敗。本文向您介紹了怎樣消除這些二義性的情況,并給出了一些指導以執行靈活且輕松的維護性測試腳本。
前提條件
安裝 IBM® Rational® Functional Tester V7 版本。
Rational Functional Tester 項目結構的概述
導入范例 Rational Functional Tester 項目(查看 下載)。您將會看到一個名為 BaseCase 的腳本以及一個名為 util 的文件夾。
通過選擇 Window > Open Perspective > Java 來切換至 Java™ 視圖。您將會看到以下的三個包:
(default package)
resources
util
BaseCase 腳本位于默認的包中,其中還有它的輔助類 BaseCaseHelper ,以及與 Resources 包中腳本有關的其他配置文件。這兩個包在 Functional Test 視圖下看不到。您創建了 util 包,以及包中的類。在接下來的章節中,您將會使用到這個框架(見于圖 1)。
圖 1. Rational Functional Tester 項目的結構
快速瀏覽一下 find() 方法
建議您在 getMappedTestObject() 方法不能使用時,使用 find() 方法來找到一個測試對象。列表 1 中的代碼顯示了 find() 方法的結構。
列表 1. 找到方法結構
// Finds all candidates that match given search criteria starting at this TestObject public TestObject[] find(Subitem properties); |
find() 方法通過將測試對象的特定屬性,與給定的標準相比較以找到一系列的候選對象。您可以通過代表屬性的名字/值,或者包含有一個或者多個匹配字符串來搜索一個測試對象。如果使用默認的 getMappedTestObject() 方法不能識別一個測試對象,那么您可以首先定位它的父類,然后通過訪問父類的 find() 方法來找到目標測試對象。顯然,find() 方法提供了可觀的便利。腳本不再取決于對象映射。搜索候選測試對象的結果是可預測的,因此也是可靠的。您可以通過對象的屬性值來找到一個測試對象,這些屬性值可能是一個簡單的文本。維護腳本起來會更加容易。
但是,如果 getMappedTestObject() 方法不可行的話,find() 方法不會包含所有的事例。不會總有明顯系列的屬性值會匹配。find() 方法取決于明顯系列的屬性值。因此,如果測試對象沒有這樣一系列的屬性,那么這種方法就不會正常地發揮其功能。但是我們可以在返回的數組中一個個地試一下測試對象,這并不是一個聰明的辦法。有時,甚至很難找到測試對象可識別的父類,所以搜索必須從最頂層開始,例如從窗口開始。這就會降低測試對象的可識別性。
導航基于路徑的對象識別
考慮一下 find() 以及 getMappedTestObject() 方法的缺陷,您需要另外一個方法來解決 Rational Functional Tester 對象識別中的二義性情形。在本文中,我們介紹了基于路徑導航方法,來找到目標測試對象。我們將會使用程序 ClassicsJavaA 作為一個范例。為了讓事情變得更加簡單,我們假設 Place Order 按鈕就是要找的測試對象。
圖 2. 范例程序的主窗口
在記錄 Place Order 按鈕的點擊操作之后,您會得到圖 3 中對象映射的以下層級結構。您可以看到 Place Order 按鈕是框架的子部分??蚣軙鳛橹鞔翱趤盹@示,而且它就是 Place Order 按鈕的位置所在。當然,在本例中,您可以簡單使用 find() 方法來定位按鈕。但是,我們將會嘗試另外一種方法來解決這個問題。
圖 3. 對象映射的層級結構
對基于導航對象識別的介紹
有時測試人員會通過可見的線索來搜索測試的對象,例如關系中的相對位置。例如,您可能會通過它與文件夾封面圖片的相對位置來找到 Place Order 按鈕。與之類似,對于一個給定的測試對象,叫做錨對象,您可以使用 Rational Functional Tester API 來找到帶有給定路徑的任何對象。再次使用上面的例子,您可以通過找到對象附近的位置、文件夾的圖片以及特定路徑來找到 Place Order 按鈕。這里所謂的術語“路徑”是指在對象映射中將一個對象節點移動到另一個上時的邏輯距離。
通過對象映射來進行導航
在 Private Test Object Map for Script BaseCase 窗口中,您知道 Place Order 按鈕是主框架的子類。顯然,該對象映射并 沒有 包含主框架中所有的構件。按照以下步驟來得到對象映射樹的大致輪廓: