HttpWatch概述
HttpWatch是IE和Firefox瀏覽器上的一款插件工具,用來(lái)捕獲瀏覽過(guò)程中所產(chǎn)生的數(shù)據(jù)信息,并記錄其相關(guān)日志文件。雖然HttpWatch 能通過(guò)手動(dòng)來(lái)控制運(yùn)行,但很多時(shí)候?yàn)榱颂岣咝?,?duì)于一些重復(fù)執(zhí)行的任務(wù),比如性能測(cè)試需要自動(dòng)化來(lái)完成,這樣就可以使用HttpWatch來(lái)配合自動(dòng)化 測(cè)試性能來(lái)自動(dòng)獲取其相關(guān)數(shù)據(jù)信息,從而使得HttpWatch也能自動(dòng)化進(jìn)行操作。因此為了更好的配合自動(dòng)化測(cè)試,HttpWatch插件專門提供自動(dòng) 化接口類程序,以便外部程序來(lái)自動(dòng)化獲取其已經(jīng)存在的數(shù)據(jù)信息。HttpWatch中提供了大約三十種以上的自動(dòng)化接口,但只有四個(gè)主要的類用于控制 HttpWatch插件。
下圖就是描述了這個(gè)四個(gè)類與瀏覽器之間的關(guān)系:
四個(gè)主要的自動(dòng)化接口類分別如下描述:
控制類(Controller Class)
HttpWatch的控制出發(fā)點(diǎn)就是控制類,一個(gè)自動(dòng)化客戶端使用它來(lái)創(chuàng)建一個(gè)HttpWatch插件實(shí)例,或者是打開(kāi)一個(gè)已經(jīng)存在的實(shí)例文件。
插件類(Plugin Class)
HttpWatch分別為IE和Firefox提供了插件類,它主要是針對(duì)Http協(xié)議交互提供啟動(dòng)和停止方法去控制 HttpWatch的錄制功能,另外還提供了一些方法和屬性去管理和配置自動(dòng)化錄制方式。其中插件類中的“GotoURL”方法可以用于重定向?yàn)g覽任何指 定的URL地址。另外一些屬性則是為了說(shuō)明客戶端中哪些網(wǎng)頁(yè)是否已經(jīng)加載完成,哪些請(qǐng)求是否是當(dāng)前的錄制請(qǐng)求。日志中的屬性信息可以說(shuō)明錄制請(qǐng)求是否已經(jīng) 達(dá)到錄制的標(biāo)準(zhǔn)。
日志類(Log Class)
通過(guò)插件去訪問(wèn)日志對(duì)象,獲取日志信息,這些日志信息就是HttpWatch錄制過(guò)程記錄的請(qǐng)求和響應(yīng)信息。日志類提供了許多 屬性和方法,并且允許對(duì)這些錄制的數(shù)據(jù)信息進(jìn)行檢索和保存,或者以多種格式導(dǎo)出等等。另外,可以通過(guò)這個(gè)控制類的一個(gè)“OpenLog”方法打開(kāi)一個(gè)日志 文件,并且返回這個(gè)日志文件的相應(yīng)的說(shuō)明信息,這個(gè)說(shuō)明信息包括的就是錄制過(guò)中的請(qǐng)求和響應(yīng)文件信息。
屬性類(Entry Class)
每個(gè)日志文件都包含一個(gè)屬性列表,且這個(gè)屬性列表中包括詳細(xì)的HTTP交互信息。這些內(nèi)容具體包括請(qǐng)求的資源信息和一些返回的信息。這個(gè)請(qǐng)求和響應(yīng)屬性信息提供了訪問(wèn)頭文件和Cookies文件,這些信息都是在與服務(wù)器發(fā)生交互過(guò)程中產(chǎn)生的。
首先,在httpwatch中調(diào)用Ruby,必須要安裝ruby工具包
其次通過(guò)Ruby去訪問(wèn)httpwatch需要調(diào)用ruby的相關(guān)庫(kù)文件,httpwatch自動(dòng)化庫(kù)中已經(jīng)包含了一個(gè)com組建,為了使用ruby去訪問(wèn)它就需要引入“win32ole”庫(kù)文件,通常在代碼中添加以下聲明即可:
Require ‘win32ole’
第三,關(guān)于與httpwatch插件的交互
需要先創(chuàng)建一個(gè)控制類,通過(guò)控制類來(lái)創(chuàng)建它的實(shí)例。通過(guò)httpwatch接口直接創(chuàng)建控制類如下:
controller = WIN32OLE.new('HttpWatch.Controller')
接下來(lái)就是需要去創(chuàng)建一個(gè)瀏覽器的實(shí)例對(duì)象,這個(gè)瀏覽器的實(shí)例對(duì)象包括IE和Firefox兩種,且分別對(duì)這兩種類型瀏覽器都 給予支持。而這兩種對(duì)象都有兩個(gè)方法為:New和Attach。這個(gè)New方法是用來(lái)創(chuàng)建一個(gè)新的實(shí)例,這個(gè)新的實(shí)例類型必須與這個(gè)瀏覽器對(duì)象中插件類型 想一致。而Attach方法則表示可以創(chuàng)建一個(gè)新的實(shí)例并且可以嵌入已經(jīng)創(chuàng)建過(guò)的另外一些組件。兩種方法均返回的是httpwatch插件對(duì)象。
下面這段代碼表示創(chuàng)建一個(gè)新的IE實(shí)例,并嵌入了httpwatch插件組件:
controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.IE.New()
關(guān)于Firefox的新實(shí)例和組件如下:
controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.Firefox.New()
關(guān)于Attach方法在IE和Firefox瀏覽器實(shí)例中使用是不同的,IE實(shí)例需要依賴IE IWebBrowser2接口,如下所示代碼段:
ieBrowser = WIN32OLE.new('InternetExplorer.Application')
ieBrowser.Visible = true # Required to see the new window
control = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.IE.Attach(ieBrowser)
相比IE,F(xiàn)irefox需要配置文件名才能運(yùn)行實(shí)例,如下:
controller = WIN32OLE.new('HttpWatch.Controller')
plugin = controller.Firefox.Attach('FirefoxProfileName')
所有的返回對(duì)象都是插件對(duì)象類型,且能被控制類所調(diào)用。
首先你的瀏覽器實(shí)例中必須嵌入HttpWatch插件,這個(gè)時(shí)候你的應(yīng)用程序?qū)刂祁惡筒寮?duì) 象。一般情況下,我們?cè)谑褂胔ttpwatch進(jìn)行錄制之前需要配置很多功能,此時(shí)說(shuō)到是過(guò)濾器,過(guò)濾器一般用于精確查找我們想要的信息,從而去掉那些不 需要的信息。然后一般在沒(méi)有特定需求和目標(biāo)的時(shí)候,將默認(rèn)關(guān)閉過(guò)濾器設(shè)置。代碼段如下:
plugin.Log.EnableFilter(false)
在錄制之前需要清空httpwatch的日志信息和瀏覽器的緩存信息。代碼段如下:
plugin.Clear()
接下來(lái)我們可以開(kāi)始錄制了,代碼段如下:
plugin.Record()
當(dāng)頁(yè)面發(fā)生加載產(chǎn)生http協(xié)議流量信息時(shí),此時(shí)錄制機(jī)制才會(huì)記錄這些過(guò)程。關(guān)于如何驅(qū)動(dòng)瀏覽器進(jìn)行頁(yè)面加載,有如下三種方法:
1、通過(guò)瀏覽器自身的接口來(lái)驅(qū)動(dòng),如IE中的IWebBrowser2
2、通過(guò)設(shè)計(jì)框架來(lái)驅(qū)動(dòng),如Watir、WatiN等
3、調(diào)用插件對(duì)象自身的方法”GotoURL”
通常我們使用第三中方法,因?yàn)樗遣寮膬?nèi)置方法,可以方便測(cè)試網(wǎng)頁(yè)加載的正確性和度量頁(yè)面的性能。而且該方法可以很好的控制由于頁(yè)面加載而導(dǎo)致的連接超時(shí)等問(wèn)題,如下代碼段:
myUrl = 'http://www.example.com'
plugin.GotoUrl( myUrl )
control.Wait( plugin, -1 ) # don't return until the page loads
錄制完頁(yè)面請(qǐng)求過(guò)程之后就需要停止錄制,就需要調(diào)用插件對(duì)象的stop方法了,并且還要關(guān)閉瀏覽器,調(diào)用插件對(duì)象的CloseBrowser方法。
關(guān)于Watir的下載和安裝請(qǐng)?jiān)敿?xì)見(jiàn)《自動(dòng)化測(cè)試框架設(shè)計(jì)理解文檔V3.0》。
通過(guò)watir來(lái)調(diào)用httpwatch插件需要引入watir庫(kù)文件,代碼段如下:
require 'win32ole'
require 'watir'
# Open the IE browser using Watir
ie = Watir::IE.new
# Attach HttpWatch
control = WIN32OLE.new('HttpWatch.Controller')
plugin = control.Attach(ie.ie)
# Start recording
plugin.Record()
當(dāng)錄制運(yùn)行完之后,需要保存當(dāng)前的運(yùn)行日志,代碼段如下:
plugin.Log.Save('c:\\mylogfiles\\mylogfile.hwl')
當(dāng)需要訪問(wèn)日志的時(shí)候,就需要調(diào)用插件對(duì)象中的方法OpenLog,代碼段如下:
# You always need to create an instance of Controller to use the HttpWatch Automation
controller = WIN32OLE.new('HttpWatch.Controller')
# Open the log file and keep a reference to the returned Log object
log = controller.OpenLog("c:\\temp\\test.hwl")
# Access the data in the log file using properties of the log object
printf "The log file contains %d entries", log.Entries.Count
聯(lián)系客服