1、了解自動化測試,什么是自動化測試?(可以參數百度百科“自動化測試”)
2、了解自動化測試
* 自動化測試如何改善產品的質量
* 自動化測試無法完全替代手工測試
* 自動化測試無法發現新的問題——適合用來回歸測試
* 自動化測試覆蓋率並非越大越好——從產品測試的需求入手,定制自動化測試策略,可復用的,無改動的模塊可以使用自動化測試。
* 自動化測試是需要成本的—— 因為自動化測試的投入也是很大的。這里面需要考慮到自動化與手工的投入與產出比。
3、如何進行自動化測試?
自動化測試最主要的三個問題(針對GUI軟件C/S架構):
第一個:如何獲取要操作的GUI元素。
第二個:如何操作GUI元素。
第三個: 如何設置驗證點與如何驗證。
另外,B/S架構的自動化測試,利用HTML語言與DOM模型結合,可以實現GUI元素的操作。
4、安裝RFT后,動手做個小實例。了解RFT的工具原理。
第一步: 安裝RFT工具。
第二步: 認識RFT工具。找到“配置”——》“配置應用程序進行測試”,這個菜單進行配置,需要測試的軟件(這里使用自帶小DEMON)。
第三步: 實踐RFT工具的錄制、回放功能。
下面轉載一個實例過程:
Rational Functional Tester(簡稱 RFT)是 IBM 提供的強大的自動化功能和回歸測試工具,至於其具體如何強大本文就不贅述了,您可以參考文末參考資料里給出的 RFT 的產品專題。現身說法,Lotus Notes 的大量的自動化測試腳本都是建立在 RFT 之上,包括功能測試、性能測試和本地化測試。對於我們來說,RFT 是一個值得信賴的工具。RFT 的特性很多,以下僅列出我們所關注的一部分關鍵特性:
- 支持多種應用程序,包括 Win32 Native、Eclipse、.Net, 瀏覽器和其他一些應用
- 支持使用 Java 和 VB.NET 進行腳本開發
- 支持操作的錄制和回放
- 和 Eclipse 緊密集成,支持方便的開發和調試
- 通過插件可以和 ClearCase 緊密集成
- 易於擴展,可以靈活的適應被測程序的需求
下圖展示了 RFT 的使用界面,如果您曾經使用過 Eclipse,您將會對此感到非常親切。
圖 3. RFT 使用界面
在 RFT 的眾多特性中,錄制和回放是非常值得一提的功能,測試人員可以直接通過錄制屏幕操作來生成測試腳本,然后通過回放來執行測試。有經驗的測試人員也可以通過它來快速生成有用的代碼片段。
下面讓我們來看一看如何使用 RFT 錄制功能來生成上一章中的測試用例的腳本:
- 運行我們的 CD 訂購程序:C:\Program Files\IBM\SDP\FunctionalTester\FTSamples\ ClassicsJavaA.jar。實際上,這是 RFT 自帶的一個示例程序。(RFT 在安裝后會對系統 JVM 進行配置,所以我們不再需要對普通的 SWT 程序安裝額外插件,直接運行就可以了)
- 在一個空白的 RFT 測試腳本中,點擊 "Script->Insert Recording" 菜單,RFT 將彈出“Recording”對話框,啟動腳本錄制。
- 手工操作我們的 CD 訂購程序,選擇條目,點擊“Place order”按鈕,然后點擊 Cancel 關閉彈出的“Member Logon”對話框。
- 執行完畢后,在 Recording 對話框中點擊停止按鈕,錄制就會終止。RFT 會生成測試用例步驟所對應的代碼。如圖 4 所示。
圖 4. RFT 錄制生成的測試腳本
您可以通過點擊“Script->Run”菜單來運行新生成的腳本,一切都很簡單。
如果您足夠細心,就能夠在圖 4 中發現更多的信息。RFT 在生成腳本的同時,會把從應用程序捕獲的 UI 信息保存在映射文件(object map)里面,比如 tree2 和 placeOrder。而在生成的腳本中將直接使用對象上的方法,這些方法在底層將會最終映射到具體的鼠標和鍵盤事件。
圖 5 展示了 RFT 本身的錄制流程如,對於每個腳本,都有獨立的映射文件。RFT 會從映射文件里面查找,如果找不到當前測試對象,會把測試對象的信息加入到映射文件里面。
圖 5. 錄制流程
如果您更細心的話,您會發現 RFT 的錄制完成了捕獲和操作的功能,而沒有生成驗證相關的代碼,因為這些需要您隨后自己補齊。如果您對如何更高效的做驗證感興趣的話,歡迎關注我們的后續文章。
本地生成的腳本如下:
1 package baidu; 2 import resources.baidu.testHelper; 3 import com.rational.test.ft.*; 4 import com.rational.test.ft.object.interfaces.*; 5 import com.rational.test.ft.object.interfaces.SAP.*; 6 import com.rational.test.ft.object.interfaces.WPF.*; 7 import com.rational.test.ft.object.interfaces.dojo.*; 8 import com.rational.test.ft.object.interfaces.siebel.*; 9 import com.rational.test.ft.object.interfaces.flex.*; 10 import com.rational.test.ft.object.interfaces.generichtmlsubdomain.*; 11 import com.rational.test.ft.script.*; 12 import com.rational.test.ft.value.*; 13 import com.rational.test.ft.vp.*; 14 import com.ibm.rational.test.ft.object.interfaces.sapwebportal.*; 15 /** 16 * Description : Functional Test Script 17 * @author lenovo 18 */ 19 public class test extends testHelper 20 { 21 /** 22 * Script Name : <b>test</b> 23 * Generated : <b>2014-10-18 上午2:01:44</b> 24 * Description : Functional Test Script 25 * Original Host : WinNT Version 6.1 Build 7601 (S) 26 * 27 * @since 2014/10/18 28 * @author lenovo 29 */ 30 public void testMain(Object[] args) 31 { 32 startApp("ClassicsJavaA"); 33 34 // Frame: ClassicsCD 35 tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)")); 36 tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)")); 37 tree2().click(atPath("Composers->Haydn->Location(PLUS_MINUS)")); 38 tree2().click(atPath("Composers->Haydn->Symphonies Nos. 94 & 98")); 39 tree2().click(atPath("Composers->Haydn->Symphonies Nos. 99 & 101")); 40 tree2().click(atPath("Composers->Schubert->Location(PLUS_MINUS)")); 41 tree2().click(atPath("Composers->Schubert->Die schone Mullerin, Op. 25")); 42 placeOrder().click(); 43 44 // Frame: Member Logon 45 memberLogon().close(); 46 47 // Frame: ClassicsCD 48 classicsCD(ANY,MAY_EXIT).click(atPoint(611,5)); 49 } 50 }