qtp安裝和使用


QTP許可證密鑰的破解步驟:

以前使用QTP9.2 使用此方法成功破解,現在本人使用的HP QuickTest Professional 11 英文版,也成功適用。

一、准備工作:

1. 由於注冊碼文件自動生成到C:\Program Files\Common Files\Mercury Interactive\License Manager目錄下,所以如果缺少這個路徑文件,請先創建;

2. 關閉殺毒軟件。

二、運行注冊碼應用程序

1. 下載QTP注冊機-見附件,應用程序mgn-mqt82.exe,雙擊運行,來創建注冊碼,見頁面提示:

-- e!l console v1.01 ---

Geting MachineID...
MachineID: 8-45036
Generating License...
License Generated Successfuly.
License Saved: 'C:\Program Files\Common Files\Mercury Interactive\License Manager\lservrc'.
All Done!

注:如果提示框沒有出現:'C:\Program Files\Common Files\Mercury Interactive\License Manager\lservrc',請先確保Mercury Interactive、License Manager文件夾是否創建,lservrc不用手工創建,當運行注冊碼運用程序時會自動生成。

2. 進入‘C:\Program Files\Common Files\Mercury Interactive\License Manager’目錄下,打開lservrc文件,Copy文件第一行或者第三行以#結尾的的字符串,此字符串就是注冊碼;

3. 打開QTP應用程序,選擇License Type: Seat License, 在注冊碼輸入框paste注冊碼。

當出現提示信息:License Type installed successfully

恭喜你!注冊成功

 

四則運算生成腳本的方法:

在Automation的record and Run Settings中加入計算器程序URL

首先錄制一個5+3的運算生成腳本,然后我們來逐步完善加強。

Window("計算器").WinButton("5").Click
Window("計算器").WinButton("+").Click
Window("計算器").WinButton("3").Click
Window("計算器").WinButton("=").Click
Window("計算器").WinButton("CE").Click
Window("計算器").Close

1.首先,我們因為我們打開計算器的地址不同,如果想把腳本下來以后用,打開的地址需要每次設置,所以我們把錄制設置里的地址去掉,改成手動在腳本里添加打開方式,當然這一步也可以不做。在腳本最前面加上打開計算器
If Window("計算器").Exist(2)<> true Then
SystemUtil.Run "C:\WINDOWS\system32\calc.exe"
End If


2.輸入第一個數字,我們希望的是1-5位數字,比如一個三位數,是不是我們需要在計算器上點擊三個數字,所以click操作得點擊三次,
所以我們需要給他一個數字的位數,數字的位數我們給他一個變量first_length,這個變量取值是一個1-5位的隨機 數RandomNumber(1,5).
然后開始在計算機上點次數,所以用for語句 For i=1 to first_length(從1到first_length隨機生成幾個數字就點幾次
然后給一個0-9的隨機數字num=RandomNumber(0,9),就是計算器當前點的數字是幾。
把Window("計算器").WinButton("5")中的5換成num,得是字符型的Winbutton(Cstr(num)),運行一下報錯,說沒找到按鈕,在對象庫中不存在,所以我們需要把計算器的所有東西都加到對象庫中用object repository。
然后在運行一次。那么計算中的第一位數字設置完成了
計算中的第二位數字跟第一位是一樣的,所以腳本直接復制過去,把變量換成second_length

3.下面開始增強運算符號,我們錄制的是加法運算,但我們要做的是四則運算,所以這個運算符是隨意的,讓它自己隨機在加減乘除中選擇,給一個變量oper_num=RandomNumber(1,4),如果隨機生成1,那么就點擊加號,生成2時減。。。
我們用select case語句。oper_num=RandomNumber(1,4)
Select Case oper_num
Case 1
Window("計算器").WinButton("+").Click
Case 2
Window("計算器").WinButton("-").Click
Case 3
Window("計算器").WinButton("*").Click
Case 4
Window("計算器").WinButton("/").Click
End Select


4.前面的值都設置完了,下一步我們想是不是要把計算結果看下是否正確,那我們把點擊=后的結果輸出來。這時我們打開active screen預覽窗口,找到點擊等號那個屏,在計算結果處右擊選擇insert output value,選擇text那個值輸出,然后彈出界面選擇輸出到哪里,我們輸出到data table中的一列,寫一個名字actual_result。選擇放到當前步驟后面after current step.也就是按完等號之后把結果輸出來的操作。這時我們看到點擊等號后的腳本后面生成一句代碼Window("計算器").WinEdit("Edit").Output CheckPoint("Edit")
運行一下


這就是一個最簡單的1-5位的四則運算。


6.但是我們在實際中並不是只跑一次,我們得跑很多次,所我們需要在整個腳本的前面加一個for...next循環,讓他多跑幾次。我們可以設置10次。for times=1 to 10 。


7.我們還有一個問題,剛剛我們讓點擊等號后的結束輸出了,現在我們跑十次,那我們最后十次的結果都輸出,最后顯示的只能是最后一次的運算結果。因為我們是在這個action給他for的,所以只寫到第一行里。

這時我們可以把計算結果的文本值手工拿出來賦值到actual_result列的下面幾行。
Data Table.value("actual_result,",dtGlobalSheet)=Window("計算器").WinEdit("Edit").GetROProperty("text"),
這是賦值的,這樣還是會賦值到第一行,所以還得在這段腳本前面加上行號,Data Table.SetCurrentRow(times)(當前運行到哪一行,就執行下面語句給他賦值)(times是for循環的那個times)


8.運行一下,這時有可能出現總跑不完的問題,這時把file-》setting中的run改成只迭代一次,因為我們設置的for循環語句跑十次,是這個action里面跑十次,但是這個action還得按照setting中設置的迭代次數跑,這樣就是相當多遍,所以我們改成一次迭代,就相當於只跑十次了


當然也可以設置一個預期結果except_result用來比對實際與預期結果,並且給個狀態status,相同就pass,不相同就fail。

腳本里,第一個數字點擊完成next后加入代碼:first_num=Window("計算器").WinEdit("Edit").GetROProperty("text"),這就是計算機運算的第一位數字,然后第二位second_num=Window("計算器").WinEdit("Edit").GetROProperty("text")

這兩位經過運算讓他顯示在data table的expect_result中
在等號后,Select Case oper_num
Case 1
Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)+CDbl(second_num)
Case 2
Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)-CDbl(second_num)
Case 3
Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)*CDbl(second_num)
Case 4
Data Table.Value("expect_result",dtGlobalSheet)=CDbl(first_num)/CDbl(second_num)
End Select

至於結果的比對,自己去寫下。
當然我們的腳本還是有些漏洞,比方說除時除數不能為零等,這個自己去研究完善下。

四則運算具體的腳本語言:

For times=1 to 2

SystemUtil.Run "C:\WINDOWS\system32\calc.exe","","C:\WINDOWS\system32","open"

first_length=RandomNumber(1,5)
For i=1 to first_length
num1=RandomNumber(0,9)
Window("計算器").WinButton(Cstr(num1)).Click
Next
first_num=Window("計算器").WinEdit("Edit").GetROProperty("text")  做判斷時取的第一個數的值
oper_num=RandomNumber(1,4)
Select Case oper_num
Case 1
Window("計算器").WinButton("+").Click
Case 2
Window("計算器").WinButton("-").Click
Case 3
Window("計算器").WinButton("*").Click
Case 4
Window("計算器").WinButton("/").Click
End Select
sencond_length=RandomNumber(1,5)
For i=1 to sencond_length
num2=RandomNumber(0,9)
Window("計算器").WinButton(Cstr(num2)).Click
Next
second_num=Window("計算器").WinEdit("Edit").GetROProperty("text")  做判斷時做的第二個數的值
Window("計算器").WinButton("=").Click
DataTable.SetCurrentRow(times)                                                               當前行數
DataTable.value("actual_result",dtGlobalSheet)=CDbl(Window("計算器").WinEdit("Edit").GetROProperty("text"))  把實際結果賦值
Select Case oper_num
Case 1
DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)+CDbl(second_num)
Case 2
DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)-CDbl(second_num)
Case 3
DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)*CDbl(second_num)
Case 4
DataTable.Value("expect_result",dtGlobalSheet)=CDbl(first_num)/CDbl(second_num)
End Select
If DataTable.value("actual_result",dtGlobalSheet)=DataTable.Value("expect_result",dtGlobalSheet) Then   實際結果和理論將結果的判斷
DataTable("status",dtGlobalSheet)="PASS"
else
DataTable("status",dtGlobalSheet)="FAIL"
End If
Window("計算器").Close

Next

小飛機所有頁面的錄制和腳本加強

 

1.首先把小飛機的登錄,訂飛機票,還有傳真頁面的對象分別存入對象庫中保存。
有一點需要注意訂單頁面設計的到對象比較多,但我們最好是用到哪個存哪個,不用的就不存,因為多了系統也會運行比 較慢。就像人的大腦記得東西多了,就會累。影響性能。
2.可以用associate repository把對象和action關聯起來。

 

3.錄制小飛機的登錄,訂飛機票,傳真。
4.分別拆分到不同的action中。那怎么分呢?可以把鼠標放到要拆分的地方,點擊菜單edit->action->aplit action,或者點擊快捷菜單。分成login,insert,fax。拆分時拆分的兩部分可以是兄弟關系,也可以是父子關系。而且可以分別起名字。

 


5.拆分完后我們可以分別給每一部分關聯它的對象,不需要的刪除。(因為有些事關聯着的所以刪除不了,這時把關聯的地方去掉關聯即可)

 

注意:首先flight頁面中有個menu對象,這個menu是fax中的,可以去掉。共享對象庫是只能讀的。
fax中我們發現fax中有兩個order號,其實我們只需要11那個,先把下面的刪除,等會運行可能會有問題,到時我們會 解決。而且我們發現menu雖然是需要的在fax中,但menu沒有在fax中,所以我們需要完善下對象庫。點擊resource-》object repository,把menu導出。為fax2.然后點擊object repository中的tool-》object repository merge tool,把fax和fax2關聯下。保存為fax3.然后把action fax與fax3關聯。

 


6.首先我們還是把飛機啟動的改成手動的
If Dialog("Login").Exist(2)=false Then
SystemUtil.Run"C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4a.exe"
End If
把設置密碼那改為跟上面輸入用戶名一樣的形式set "mercury"

 


7.運行一下,發現到傳真頁面出問題了,說找不到傳真頁面,其實傳真頁面有,只是叫傳真18了,比對象庫中加1了,那我們怎么匹配到這個加1 的窗口呢?我們打開對象庫的fax3,我們的傳真號那寫的是11,那我們編輯下,把傳真號11改為Num,這樣還是不行,因為下面text中是11,所以text中的11也要改,我們要改為一個自動匹配的數字,那怎么匹配呢?點擊點擊下面的單選框regular expression,然后選擇一個字符讓它代表里面的東西是數字,我們去幫助文檔中找regular expression(reg exp)object下有一個pattern property,找到\d代表的是數字,所以我們把11改成\d,\d出現次數用{n,},所以text文本內容改為fax order No\.\d{1,}至少匹配一次。

 

同時腳本中相應傳真編號那也把名字改一下fax order No.Num

 

在接着運行一下,跑通后可以繼續完善腳本

 


8.那我們登錄頁面,第一節課講的那些登錄的用例可以放進去了。但有一點要注意:最后一條記錄一定要保證他能正常進行。才能進入到insert訂單頁面,這樣流程就能跑起來了,也就是程序只要從頭走一遍就都能驗證了,這個過程一直重復進行。這就是自動化的好處

 

大家可以自己設計下,這里就不寫了
這里我們只加一點,我們只驗證它流程的正確定。

 

在點擊了login點擊ok后,或者在insert之前,驗證定飛機票的那個頁面是否出現。即驗證登錄是否成功,我們在insert頁面之前加吧。加一個檢查點,看那個頁面是否跳出來

 

 

 

9.訂單中輸入日期,我們知道是隨機的,所以我們設置一個變量randomDate=Date+XXX,date是當前時間,我們讓他去加一個時間(1-30天中的任意一天),所以,定義變量iDay=RandomNumber(1,30),讓randomDate=Date+iDay,當然如果我們不知道寫的對不對可以新開一個窗口編寫完,寫個msgbox讓他輸出來看下,正確了在貼到這邊來。這樣我們得到輸入隨機日期的腳本:
iDay=RandomNumber(1,30)
randomDate=Date +iDay

 

下面是構造mmddyy格式的,並且當日期或者天是一個數字時需要前面加0,
mm=month(randomDate)
If Len(month)(randomDate)=1 Then
mm="0"&mm
End If

 

dd=day(randomDate)
If Len(day(randomDate))=1 Then
dd="0"&dd
End If
fmtDate=mm&dd&right(year(randomDate),2)

 


把fmtDate貼到
Window("Flight Reservation").WinObject("Date of Flight").Type "fmtDate"

 

當然這個也可以用函數寫

 

這就是我們的隨機時間
10.下面是我們的fly from隨機。那這個地方怎么隨機呢?
fromIndex=RandomNumber(),因為我們的ComboBox從哪出發是一個下拉列表形式,從里面選擇,它的個數就是下拉列表有多少項,所以我們可以通過Window("Flight Reservation").WinComboBox("Fly From:")里面的個數減一,我們用一個函數GetltemsCount,
按照我們的理解也就是可以寫成:
fromIndex=RandomNumber(0,Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount-1)
但是因為RandomNumber里面不支持表達式,所以我們寫成

 

fromCount=Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount-1
fromIndex=RandomNumber(0,fromCount)
Window("Flight Reservation").WinComboBox("Fly From:").Select fromIndex

 

 

 

同樣fly to也是一樣的。所以目的地隨機是:

 

toCount=Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount-1
toIndex=RandomNumber(0,toCount)
Window("Flight Reservation").WinComboBox("Fly to:").Select toIndex

 

11.下面的選擇航線winlist也是一個列表,我們要選擇當前航線中的某一條航線。
所以

 


listCount=Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetltemsCount-1
listIndex=RandomNumber(0,listCount)
Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select listIndex

 


12.下面訂單的設置用戶名是我們的登錄用戶,即登錄用戶名,所以我們可以從login action里面的輸出到data table表里。然后到insert action設置用戶名這從data table表取。

 

所以我們在login action中登錄名那行的腳本右鍵選擇insert output value,有可能報錯。那我們換另一種方式
在輸入用戶名那行腳本后面空出一行,鼠標放空出的一行,打開小飛機的登錄頁面,然后點擊record,選擇菜單中insert-》output value-》text output value,然后選中login頁面的agent name輸入框,然后點擊ok彈出text output value properties對話框,選擇modify,然后選中global sheet,name輸入框自己取名字agent_name,就可以了。

 


然后insert action中的Window("Flight Reservation").WinEdit("Name:").Set "mercury"改為Window("Flight Reservation").WinEdit("Name:").Set Data Table("agent_name",dtGlobalSheet)

 

這樣我們取得值就是登錄人的信息了。

 

13.Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1這行信息不需要的。

 

14.下面是設置集票數,因為我們經過實踐知道集票數只能是最高10張,所以寫成:

 

tickets=RandomNumber(1,10)
Window("Flight Reservation").WinEdit("Tickets:").Set Cstr(tickets)

 

這樣就是我們的隨機機票數。

 


15.最后就是機艙隨機,跟加減乘除隨機一樣的,1-3中情況

 

num=RandomNumber(1,3)
Select Case nun
Case 1
Window("Flight Reservation").WinRadioButton("First").Set
Case 2
Window("Flight Reservation").WinRadioButton("Business").Set
Case 3
Window("Flight Reservation").WinRadioButton("Economy").Set

 

End Select

 

16.fax里不需要修改。然后運行一下試試。這就是我們做的讓整個流程能夠跑通的操作。這個沒有人工控制,都是機器自動運行的。

 

 小飛機腳本加強語言:

login:暫未做加強

 

If Dialog("Login").Exist(2)=false Then
SystemUtil.Run"D:\HP\QuickTest Professional\samples\flight\app\flight4a.exe"
End If

 


Dialog("Login").WinEdit("Agent Name:").Set "mercury"
Dialog("Login").WinEdit("Password:").Set "mercury"
Dialog("Login").WinButton("OK").Click

flight:

 

iday=RandomNumber(1,30)
randomdate=date+iday

 

mm=month(randomdate)
If Len(mm )=1 Then
mm=0&month(randomdate)
End If

 

dd=day(randomdate)
If Len(dd)=1 Then
dd=0&day(randomdate)
End If

 

fmtdate=mm&dd&right(year(randomdate),2)

 

Window("Flight Reservation").WinObject("Date of Flight:").Type fmtdate

 

fromindex=RandomNumber(0,Window("Flight Reservation").WinComboBox("Fly From:").GetItemsCount-1)

 

Window("Flight Reservation").WinComboBox("Fly From:").Select fromindex

 

toindex=RandomNumber(0,Window("Flight Reservation").WinComboBox("Fly To:").GetItemsCount-1)

 

Window("Flight Reservation").WinComboBox("Fly To:").Select toindex

 

Window("Flight Reservation").WinButton("FLIGHT").Click
flight=RandomNumber(0,Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetItemsCount-1)

 

Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select flight

 

Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click

 


Window("Flight Reservation").WinEdit("Name:").Set "mercury"  此處未做增強,可參照四則運算第四步

 

tickets=RandomNumber(1,10)
Window("Flight Reservation").WinEdit("Tickets:").Set Cstr(tickets)

 

num=RandomNumber(1,3)
Select Case nun
Case 1
Window("Flight Reservation").WinRadioButton("First").Set
Case 2
Window("Flight Reservation").WinRadioButton("Business").Set
Case 3
Window("Flight Reservation").WinRadioButton("Economy").Set

 

End Select

 

Window("Flight Reservation").WinButton("Insert Order").Click
Window("Flight Reservation").WinMenu("Menu").Select "File;Fax Order..."

fax:  未做增強

SystemUtil.Run "C:\Program Files\SogouInput\SogouExe\SogouExe.exe","/check","","open",0
Window("Flight Reservation").Dialog("Fax Order No\. \d{1,}").WinObject("Fax Number:").Type "1111111111"
Window("Flight Reservation").Dialog("Fax Order No\. \d{1,}").Drag 264,211
Window("Flight Reservation").Dialog("Fax Order No\. \d{1,}").WinObject("Fax").Drop 338,248
Window("Flight Reservation").Dialog("Fax Order No\. \d{1,}").WinCheckBox("Send Signature with order").Set "ON"
Window("Flight Reservation").Dialog("Fax Order No\. \d{1,}").WinButton("Send").Click
Window("Flight Reservation").Close

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM