一篇文章學(xué)通QTP UFT自動化測試實戰(zhàn)
? ? ? ?UFT作為一款老牌自動化測試工具,入門相對簡單,在開源自動化工具爆發(fā)的今天,UFT在當今在自動化測試領(lǐng)域仍有一定優(yōu)勢,學(xué)習(xí)UFT可以幫助大家快速建立自動化測試思想,尤其在開發(fā)自動化測試平臺、測試工具過程中,可以根據(jù)UFT提供的設(shè)計思想,為設(shè)計出好的工具提供思路。像現(xiàn)今流行的智能駕駛智能座艙、arm底層測試工具都有UFT身影。本篇通過實例方式幫助大家學(xué)會UFT自動化測試工具,包含重點、難點以及最終的測試框架。
1、基礎(chǔ)使用
? ?? ?錄制腳步功能使用
首先需打開UFT 選擇Web、NET等常用的控件

工具欄選擇?
Record->Record and Run Settings 選擇Web程序或者Windows Applications->Recod(開始錄制)

? ? ? ??錄制開始后,首先打開”百度”窗口,我們在搜索框中輸入”test”,并“百度一下”錄制的腳本如下:

?識別不同對象
Web應(yīng)用:

腳本如下:
? ?普通C/S系統(tǒng)

.NET應(yīng)用

代碼如下:
2、登錄功能開發(fā)
? 步驟: 先增加對象庫
? ? ? ? 工具欄 Object Spy->Add Object to Respository,對象庫用于保存UI界面元素屬性方法,以下是“Flight”-“l(fā)ogin”-“Agent Name”對象庫,其中Login是登錄界面,Agent Name是登錄框,如下:


注意:以上圖1-7為Login對象屬性,圖1-8為Name對象屬性,寫腳本之前先把界面對象增加到對象庫中,如上:1-8中,Agent Name在對象庫中有兩層,第一層為Login,第二層為Agent Name:,腳本中要先從第一層開始,找到對應(yīng)的Class,Login對應(yīng)的Class->Dialog,Agent Name:對應(yīng)WinEdit
登錄腳本如下:

Run之后:Agent Name:中成功輸入“test”,如下圖所示:

基礎(chǔ)加強:以上Login,Agent Name:對應(yīng)的Name值是默認值,也可以在對象框中進行修改:
Login->Flight_Login,Agent Name:->Name:,如下圖所示:

修改完之后測試腳本會自動修改為:
3、增加訂單
? ? ? 通過上面的學(xué)習(xí),我們學(xué)會了編寫第一個測試腳本,下面繼續(xù)登錄到Flight Reservation中進行增加航班。

步驟: (1)先增加訂單對象增加到對象庫中

(2)、控件類型分析:該流程涉及到text,button,wincombobox,winlist四種控件。用到Set,GetROProperty,Select,Click方法.可以通過幫助文檔查看每種控件具體用法,以Set為例:

如:文本框詳細注釋如下
增加訂單功能如下:
注:腳本詳解,點擊”ok”之后,跳轉(zhuǎn)到訂單界面,頁面出現(xiàn)需要時間,腳本中加入wait方法,wait之后的腳本便會延遲執(zhí)行;Select是選取值,選第一個值,則用0,選二個,則用1,以此類推;直接點擊按鈕用click;為文本框賦值用set;Type方法是按照字符逐個輸入,而set是一次性賦值。
執(zhí)行完之后”Order No”產(chǎn)生

4、檢查FlyFrom與FlyTo下拉列表值
功能分析:以FlyFrom為例,通過幫助文檔,我們得知用GetItemsCount方法計算下拉框元素總個數(shù),通過For循環(huán)獲取其中某個值,然后與預(yù)期值進行比對。
?腳本如下:
腳本分析:
把預(yù)期值存放于數(shù)組中,用GetItemsCount方法獲取總數(shù),用GetItem獲取FlyFrom列表實際值,由于是從第一個值對應(yīng)Item是0,故For語句總數(shù)要減1,數(shù)組Item也是從零開始,取”Denver”用flyFrom(0),取數(shù)組長度可用ubound方法,如:ubound(flyFrom),msgbox 是以彈出框的形式輸出消息,vbs連接字符串需要用&符號

5、工具欄新增訂單以 File->Open Order為例
首先需要把menu對象增加到對象庫中,有以下兩種方法可打開Open Order…
?方法一: Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."
?方法二:Window("Flight Reservation").WinMenu("Menu").Select "<Item 1>;<Item 2>"

6、對象庫操作
6.1 合并對象庫、對象庫就是儲存QTP各Object以及其識別屬性,從而在被測應(yīng)用程序中找到對應(yīng)的唯一的對象,在進行寫腳本之前,需要先增加對象庫Resources->Object Repository,用鼠標點擊Help下方”+”鼠標會變成”手”狀,然后點擊被測程序的UI元素,如點擊Fly From,便會加入到對象庫中.

合并對象庫:
如A同學(xué)在對象框中增加了FlyFrom,B同學(xué)在對象框中增加了FlyTo,我們可以把A,B同學(xué)的對象框合并成一個新的對象庫包含F(xiàn)lyFrom與FlyTo?
打開:Object->Object Repository Manager->Tools->Object Repository Merge Tool

選擇文件并”ok”,通過file-save便可得到合并后的對象庫

6.2 描述性編程
如不使用對象庫,可以用描述性編程:
注:如果父級對象使用使用描述性編程,則子級對象必須使用描述性編程,以下兩種寫法都有錯
6.3 GetROProperty、SetTOProperty和 GetTOProperty?
GetROProperty:獲取被測對象的運行時屬性值
SetROProperty:修改運行時被測對象的屬性,
GetTOProperty:取得倉庫對象的某個屬性的值
如:獲取FlyFrom當前值,可用GetROProperty方法,點”+”可以看到更詳細的Name,Value.其中text對應(yīng)的值是”Denver”

電“+”增加"text“屬性

由上,可以用以下腳本得到FlyFrom當前值
Set?fly?=?Window("Flight Reservation").WinComboBox("Fly From:")
msgbox?fly.GetROProperty("text")
SetTOProperty?增加屬性與屬性值
fly.SetTOProperty?"add","wang"
msgbox?fly.GetTOProperty("add")用GetTOProperty查看對象庫中該屬性值
7、函數(shù)與報告
7.1 vbs中函數(shù)有Function與Sub
Function與Sub,Function可有返回值,Sub沒有
Sub:

Function:

練習(xí):用函數(shù)重構(gòu)檢查FlyFrom值代碼:
分析:我們可用Set定義FlyFrom對象,如:
Set flyFrom = Window("Flight Reservation").WinComboBox("Fly From:")
定義后求列表框元素總數(shù)可用flyFrom.GetItemsCount
腳本如下:
注釋:定義函數(shù)CompareComobox(obj),其中obj是需要傳遞的FlyFrom對象,函數(shù)內(nèi)部直接用obj代替之前的Window("Flight Reservation").WinComboBox("Fly From:"),調(diào)用函數(shù)時直接把fly作為參數(shù)傳遞過去便好。
7.2 報告
UFT自帶測試報告Reporter方法
Reporter.ReportEvent EventStatus, ReportStepName, Details, [ImageFilePath]?
EventStatus有四種狀態(tài)0,1,2,3分別對應(yīng)micPass,micFail,micDone,micWarnging
例:用micPass,micFail重構(gòu)檢查FlyFrom下拉框值,腳本如下:

注:ImageFilePath可以不要,輸出時采用obj.GetItem(i)&"is right"方便查看是哪邊出錯,在"is right" is前應(yīng)增加一個空格,便不會與前面字符連接在一起:obj.GetItem(i)&" is right"
QTP在運行結(jié)束后,不讓它立即產(chǎn)生測試報告:
Tools-Options-Run sessions-View results 變?yōu)?strong>uncheck
配置Configure選項可以產(chǎn)生不同形式測試報告HTML,Doc,Pdf


7.3 開啟應(yīng)用程序
打開flight程序:

打開瀏覽器
8.數(shù)據(jù)驅(qū)動
8.1 自帶databable應(yīng)用舉例
? ?DataTable("Col", dtLocalSheet)
?? DataTable("Col", dtGlobalSheet)
?? dtLocalSheet就是當前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名
?? DataTable("Col", "Action2")
列名值不可為數(shù)字,特殊字符,否則會報錯

?DataTable(1, 1) 獲取Global,第1列元素數(shù)據(jù)

獲取Action1,第1列元素數(shù)據(jù)
?? 循環(huán)獲取下一行
8.2 導(dǎo)入導(dǎo)出
8.3 實戰(zhàn)datatable重構(gòu)檢查FlyFrom值:
步驟把預(yù)期值貼入datatable中

首先要循環(huán)讀出flyFrom這一列值:
法一:File-Setting-Run-Run on all rows
用以下腳本

選擇Run one iteration only 或者Run from row 1 to row 1
用以下腳本:
注:以上兩種方法都可以循環(huán)讀取flyFrom這一列值,重構(gòu)如下:
注:把數(shù)組直接改為datatable,并在Next語句之前加上datatable.SetNextRow讓datatable讀取下一行數(shù)值
8.4 動態(tài)數(shù)組與字典
Datatable中值我們也可以存放于動態(tài)數(shù)組或者字典中,然后再調(diào)用,重構(gòu)如下:
法一:動態(tài)數(shù)組
注:該函數(shù)返回值直接為數(shù)組類型,僅需要用ubound求出數(shù)組長度,便可遍歷該數(shù)組
法二:字典
注:對datatable可以不適用字典或動態(tài)數(shù)組,直接適用便可,這里只是順便介紹存儲數(shù)據(jù)的方法.字典是Key-value 數(shù)據(jù)格式,其中Key必須是唯一的,用Add方法把數(shù)據(jù)增加到字典中,如上腳本輸出的key以及對應(yīng)的value值。
9. Excel操作
注:以上腳本把讀取excel值存放于動態(tài)數(shù)組中,該函數(shù)以數(shù)組形式返回,第一個參數(shù)是excel存放路徑,第二個位工作薄名字,第三個為第幾列.讀者可以根據(jù)以下方法進行重構(gòu)檢查FlyFrom元素值,調(diào)用該方法:
寫excel:
調(diào)用該函數(shù): 調(diào)用完之后Sheet2中第一行第一列被寫入值test

10、外部文件
10.1對外部vbs文件操作
之前演示的函數(shù),我們都存放于同一個腳本文件中,下面介紹幾種方法直接調(diào)用外部文件:
把CompareComobox函數(shù)拷貝到com.vbs文件中

(1)關(guān)聯(lián)函數(shù)File->Settings->Resources增加com.vbs函數(shù)

增加完成后運行報錯:
這是由于數(shù)組放于腳本文件中,沒有作為變量傳遞過來,找不到數(shù)組原因,
法一:把數(shù)組也拷貝到該函數(shù)中
法二:函數(shù)增加一個參數(shù),用于傳遞數(shù)組
修改后執(zhí)行成功
(2)用ExecuteFile執(zhí)行
注:ExecuteFile后可直接用vbs存放路徑,也可以把com.vbs文件放solution下
用相對路徑:ExecuteFile?"com.vbs"
(3) 用LoadFunctionLibrary
10.2 對dll文件操作
用C#編寫Add方法
Set var_CreateInstance = DotNetFactory.CreateInstance(“類","dll路徑")

11、框架篇
?(1)啟動UFT
注:該方法是通過QTP自身接口AOM對象啟動QTP,該腳本只能存放于vbs文件中,然后雙擊文件,QTP便會啟動執(zhí)行腳本工程
?(2)? 代碼加載對象庫
去掉對象庫后,直接運行
Window("Flight Reservation").WinComboBox("Fly From:").Select(3)會報錯

用?RepositoriesCollection.Add加載對象庫正常執(zhí)行,直接引用tsr文件路徑
視頻課程以及框架請關(guān)注公眾號“大牛測試”
?? ??