1. 程式人生 > >Rational Functional Tester Proxy SDK 開發,第 3 部分: 使用 Proxy SDK 擴充套件 Java GUI 元件可捕獲的驗證資料

Rational Functional Tester Proxy SDK 開發,第 3 部分: 使用 Proxy SDK 擴充套件 Java GUI 元件可捕獲的驗證資料

本系列的上一篇介紹瞭如何通過 Proxy 擴充套件測試元件的識別屬性和方法。除了識別物件,RFT 也提供了較完善的驗證功能,分為屬性驗證(properties verification)和資料驗證(data verification point)兩種。本篇主要介紹如何通過 Proxy 擴充套件 RFT 的資料驗證能力,使其更靈活、更具適應性。

與屬性驗證關注於元件的屬性不同,資料驗證將期望資料與元件所包含的實際資料相比較,從而得到驗證結果。 RFT 將資料驗證細分為六種,包括列表、表格、樹、選單等。針對不同的測試物件,RFT 將捕獲來的測試資料封裝在這六種型別中,再進行驗證。可見,從測試物件捕獲資料的方式越靈活,驗證功能就越強大。本文以表格(table)為例,說明如何加強 RFT 捕獲資料的靈活性,從而增強資料驗證功能。

RFT Proxy 提供了一種擴充套件機制,方便使用者針對不同的元件和應用情況定製 RFT 能夠從被測元件所捕捉的資料以及資料的型別。以表格(Table)為例,現有的 RFT 僅提供四種方式捕獲表格中的資料,它們分別是:可見或全部的選中單元格;可見或全部的表格內容。實際測試過程往往不限於這些測試資料。例如,在某些特定情況下,表格元件中的一部分被選中時,我們需要對“未選中”部分的資料進行驗證。如果不使用 proxy,則需要依次查看錶格中的單元格,獲得未被選中的單元格資料,然後再驗證。這樣,實現自動化測試會比較麻煩,需要編寫較多的程式碼,同時在程式碼重用方面也不太靈活。這時,便可以使用 Proxy SDK 擴充套件 Table 元件的 Proxy 物件。擴充套件後,RFT 可從 table 元件捕獲“未選中單元格”;使用者可以在 Verification Point and Active 嚮導中選擇該專案,從而捕獲這些資料並進行驗證。使用 Proxy SDK 擴充套件時,具體對應關係如圖一所示:

在本文中,根據測試需求,一個值班列表如圖 2 所示。應用程式的實際需求是:在同一時間,團隊中只能有一人不在崗位(休假或生病)。因此,當其中一人的“ Status ”一欄被設定為“ Illness ”或者“ On Vacation ”時,其它人的狀態應自動被設為“ On Duty ”。要對這一過程進行 RFT 自動化測試,需要對 Java Swing 元件 javax.swing.JTable 對應的 JTableProxy 進行擴充套件,從而達到我們自動化測試目的。其步驟如下:

第一步: 使用 RFT 中的 Verification Point and Action 嚮導增加驗證點。首先選定待測的 javax.swing.JTable 元件,並選擇資料驗證方式(Perform Data Verification Point)。如圖 3 所示:

第二步: 檢視原始狀態下 RFT 為 javax.swing.JTable 元件所提供的可用於驗證的資料專案。此時的資料項僅包括 Table Contents 和 Selected Table Cells 。其中 Table Contents 包括表格中的所有資料項而 Selected Table Cells 只包含選中的單元格。如圖 4 所示。

第三步: 在 Data Value 下拉選單選擇 Selected Table Cells,點選 Next,嚮導顯示出被選中的單元格資料。如圖 5 所示:

第四步: 在此處,可使用 RFT 提供的功能將單元格與資料池中的某變數關聯起來。具體地,當進行至圖 3 所示步驟時,在期望驗證的任一單元格上單擊滑鼠右鍵,彈出選單出現後點擊 “Convert Value to Datapool Reference” 選項,之後在彈出的 “Datapool Reference Converter” 視窗選擇需要與之進行比較的資料池欄位,點選 OK 。此外,也可以使用正則表示式進行驗證。在單元格中單擊右鍵,彈出選單出現後點擊 “Convert Value to Regular Expression” 選項進行配置。DatapoolRegular Expression 的具體使用方法還請參考 RFT 手冊,不再贅述。如圖 6 所示:

第五步: 建立新的 Proxy 類並繼承原有 .java.jfc.JTableProxy 類,通過覆寫原有的方法來擴充套件在 Verification point 嚮導中能夠從下拉選單選擇到的資料驗證專案;另一方面,真正從測試物件中獲取這些資料並做適當的封裝,使其能被嚮導所識別和顯示。(本步驟詳細的程式碼請參見後續的第四章詳細程式碼及分析。)

首先,在 RFT 中建立相應 Java Project,在本例中我們命名該專案為:TableProxy ;併為專案載入 Proxy SDK 所需的 jar 檔案(請參閱本系列的上一篇)。建立新的 Proxy 類,名為 ExtendedSwingTableProxy,繼承 JTableProxy,並顯示地定義其建構函式。

其次,覆寫 getTestDataTypes 方法。在原 Data type 的基礎上增加一項可捕獲的驗證資料型別——未被選擇的行(Unselected Rows),其顯示名稱是 Unselected Table rows 。

最後,覆寫 getTestData 方法,除一般驗證資料型別外,增加針對 Unselected Rows 的處理程式碼。具體地,首先遞迴的呼叫函式自身,獲得 contents 資料型別的資料,即表格的所有資料。進而獲得被選中的行的資訊並依此對錶格資料進行篩選。再次,將資料封裝到表格資料型別 TestDataTableData 中。最後,將 TestDataTableData 物件封裝到 TestDataTable 中,並返回。

值得注意的是,getTestData 方法的返回值必須是 ITestData 介面的實現類的例項或者其子類的實現類的例項。因此,在對元件資料進行處理後,需要將他們封裝於圖 6 所示的多個實現類中的一種。使用哪一個類進行封裝,取決於使用者希望 Verification Point and action 嚮導以什麼方式將這些資料處理和顯示出來。例如,如果希望處理後的資料被顯示為一個表格,則適用 TestDataTable 類進行封裝;如果希望返回的資料僅僅是一個字串,則可用 TestDataText 封裝。 ITestData 介面的繼承關係如圖 7 所示:

第六步: 為新建的 ExtendedJTableProxy 建立 RFT Customization 檔案,如清單 1 所示。

第七步: 對該 Project 檔案打包,Export 成 .jar 檔案;

第八步: 配置併發布 JTableProxy.jar 及 JTableProxy.rftcust 兩個檔案至 RFT,重新啟動 RFT。 以上三個步驟與本系列上一篇的步驟五、六、七相似,請參閱上一篇。專案檔案結構請參閱本系列中的上一篇之圖 6 。

第九步: 重新啟動 RFT 後,使用 Verification Point and Action 嚮導再次檢視 Table 元件所能捕獲的資料專案,會發現已增加了 Unselect table rows 選項。選擇 Unselect table rows 後,嚮導顯示出在 Table 元件中使用者未選中行所包含的資料。如圖 8 及圖 9 所示:

第十步: 現在則可以再次執行上文提及的步驟 4,對未選中行的下拉選單元件進行驗證了。

在上述過程中,起關鍵作用的是 ExtendedSwingTableProxy 類,它的結構如圖 10 所示:


其中,方法 getDescriptiveName() 修改了 JTable 元件在 RFT 中的描述名稱;

方法 getTestDataTypes() 為嚮導中的 DataValue 下拉選單增加了未被選擇的行(Unselected Rows) 一項。

方法 getTestData(String) 具體處理表格中未被選中的行的資料,並將資料封裝到 TestDataTable 物件中返回。具體程式程式碼如清單 2 所示:

五、結論

本文介紹瞭如何通過使用 Rational® Functional Tester proxy software development kit (Proxy SDK) 來擴充套件 RFT 對 Java GUI 元件的測試能力。通過一個簡單的 Swing Table 應用場景,展示了 RFT Proxy SDK 對資料驗證功能的擴充套件方式,使得指令碼開發人員可從 table 元件捕獲“未選中單元格”,同時可以在 Verification Point and Active 嚮導中選擇該專案,從而捕獲這些資料並進行驗證。通過這一部分內容的介紹,可以另 RFT 的資料捕獲及驗證更加的靈活性。在接下來的一篇文章中,將主要介紹如何使用 Proxy SDK,來擴充套件 .NET domain 下編寫的 GUI 元件的 Proxy 物件,通過對 windows 的按鈕控制元件(Button)的 Proxy 物件擴充套件,實現 RFT 記錄按鈕元件點選次數的功能。

轉載:http://www.ibm.com/developerworks/cn/rational/r-cn-rftproxysdk3/index.html