QTP統計頁面加載時間

 QTP是一款功能自動化測試工具,而頁面加載時間或響應速度應該是性能測試的事情,其實QTP也可以實現對頁面加載時間的統計功能。因爲QTP使用的是VBS腳本,VBS腳本的強大之處在於它可以調用任何windows的COM組件和對象。那麼問題解決的思路就很簡單了,就是我們要利用VBS獲取 IE網頁,並統計網頁加載的時間。

  分析很簡單,但是在實現上卻有幾個技術問題:一、如何使用VBS分析網頁。我們知道網頁技術是基於DOM模型的(也不知道這麼說是不是準確),那麼只要我們能用VBS調用DOM下的document對象,那麼我們就可以使用document的方法來實現我們的要求;二、如果能實現對DOM的調用,我們如何統計頁面加載的各個階段的時間,通過查閱資料可以知道,在document中有一個readystate方法,該方法共有五個返回值,分別對應網頁初始化到網頁加載完畢五個階段,我們可以利用該方法實現我們的要求。

  實現的思路如下:

  1、利用createobject創建一個IE的實例,以訪問document對象;

  2、利用document對象的readystate屬性獲取網頁加載時各個階段的時間,

  3、利用timer()實現對毫秒的統計。timer()函數的作用是統計從午夜時間到當前時間所過去的秒數,我們用兩個timer值想減就可以得到兩個時間點之間相隔的毫秒數。

  4、爲了方便調用,將時間統計的代碼封裝成一個函數。

  最後代碼如下:

'在loadrunner腳本中,把要訪問的url做參數化,變量名爲SITEURL
'timeCount方法返回一個字符串,字符串的內容是統計各個階段發生的時間
'可以使用各種方法查看result的內容
SITEURL = "www.sina.com.cn"'設置要進行訪問的URL
result = timeCount(SITEURL)'返回運行結果
MsgBox result '輸出運行結果,在loadrunner中可以將該行註釋掉

'方法定義開始
Public Function timeCount(url)
Set dom = CreateObject("InternetExplorer.Application")  '創建一個IE的對象
dom.Navigate(url)  '打開指定的URL
time_start = Now()'獲取統計開始時的時間
timer_start = timer()'獲取當前時間的毫秒數
'a = dom.ReadyState'獲取當前IE的狀態值,將使用該狀態值判斷IE的當前狀態
dom.visible = True '設置IE可見
While dom.busy or (dom.readyState<>4)'當IE處於BUSY狀態或者加載未完成時(readystate不等於4)時,根據IE的狀態統計時間,每毫秒統計一次
wscrīpt.sleep 1 '時間間隔1毫秒,如果時間間隔比較長的話,很有可能會取不到狀態值
Select Case dom.readystate '判斷dom.readystate的值

Case 0 'IE未初始化,其實在該方法,readystate=0無意義,因爲循環至少是從1開始的.
time0 = Now()
timer0 = timer()

Case 1 '"正在發送請求"
time1 = Now()
timer1 = timer()

Case 2 '"請求已經發送完成"
time2 = Now()
timer2 = timer()

Case 3 '"可以接收到部分響應數據"
time3 = Now()
timer3 = timer()

Case 4 '"頁面加載完成"
time4 = Now()
timer4 = timer()

End select
wend
time_end = Now() '統計結束時間
'MsgBox "開始時間是:" & time1 & ";結束時間是"&time2

timeCount = "統計開始時間:"&start_time&vbcrlf&"time0:"&time0&vbcrlf&"time1:"&time1&vbcrlf&"time2:
"&time2&vbcrlf&"time3:"&time3&vbcrlf&"time4:"&time4&vbcrlf&"完成IE的初始化併發送請求:
"&(timer1-timer_start)&"秒"&vbcrlf&"發送完成並接受服務端部分響應數據:
"&(timer3-timer1)&"秒"&vbcrlf&"100%接收並完成HTML內容解析:
"&(timer4-timer3)&"秒"&vbcrlf&"總共花費:"&(timer4-timer_start)&"秒"
End Function


  代碼中的SITEURL就是我們要進行測試的頁面。

  這段代碼雖然不長,但是卻花了我整整4個小時的時間。一開始碰到的難題就是不知道VBS如何去調用document方法,在網上查了無數資料,大多是講如何在HTML代碼中進行調用,很少說到如何使用標準VBS去調用,其實到最後才明白,VBS調用訪問document無非就是這樣的一句代碼:


  Set dom = CreateObject("InternetExplorer.Application") 


  雖然簡單,但是卻花了我一個小時才明白。

  通過這樣的一段代碼時間,我現在清楚了兩件事,第一:VBS作爲腳本語言,它的強大之處在於它調用windows的COM能力,而VBS本身並沒有什麼複雜的技術和體系。第二:QTP永遠只是一款工具,它能做什麼取決於我們如何去使用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章