本節書摘來自異步社群《精通qtp——自動化測試技術領航》一書中的第1章1.3節錄制與回放—qtp的開關,作者餘傑 , 趙旭斌,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
1.3 錄制與回放—qtp的開關
精通qtp——自動化測試技術領航
階段要點
錄制在實際項目應用中的價值觀(極低)。
新手切記不可在項目應用時被禁锢在錄制中。
錄制及其相關功能的重點知識點提煉。
錄制功能“旁門左道”式的妙用。
錄制的3種模式及應用。
qtp回放機制重要原理。
實際項目應用時關于qtp腳本回放的幾項重要設定詳解。
1.3.1 請拒絕“錄制”,再開始你的實際項目之旅
1.3.1.1 引言
當人們一提到qtp,第一反應就是,它是mercury公司旗下的一款強大的商業化自動化測試工具(現已被hp公司收購)。那麼當提到qtp有什麼主要功能的時候,大家的第一反應一定是“錄制”。
很多新人認為,qtp自動化測試工具最強大的功能就是“錄制”。在衆多的自動化測試工具中,qtp的“錄制”的确做地非常有優勢和全面、以及高檔。但是,作者很負責任地告訴讀者,qtp的錄制功能雖然相當精彩,一些相關的“出彩”功能,作者甚至碰都沒有碰過,不過這并不影響作者使用qtp出色地完成各類自動化測試項目,因為靠“錄制”是做不了項目的,甚至連一個demo都做不出來。
就像作者在之前的“1.1.2 嚴格的自動化測試流程”章節中說過的那樣,自動化測試項目和軟體開發項目同屬軟體工程學,兩者是同屬一派的。在自動化測試項目的實際應用中,隻有直接編碼才能出色地根據之前的設計思想來完成腳本,如果是靠“錄制+加強”的模式,那就不可能按照前面定制的設計方法和思想來開發測試腳本。
1.3.1.2 一些“理論性的社會實際問題”執行個體
作者在1.1.2.1“測試流程是關鍵”這一節中的第五大點裡提到過幾種測試腳本種類,錄制就屬于其中最低級的“線性腳本”的範疇。錄制出來的腳本給作者這樣一種感覺“貌似華麗,其實沒有任何價值和思想”,也可以把這類腳本比作古代戰場中的一員有勇無謀的武将,表面上兇猛無比,其實隻不過是橫沖直撞之輩爾,沒有任何戰略、謀略,必然無法永遠打勝仗。
雖然qtp在錄制時有很多“華麗”的輔助功能,比如keyword view界面的各種直覺操作、active screen等。但是這些東西基本上也隻是有一個華麗的表面而已,如active screen,如果開啟了這個功能,那麼即使你錄制一個簡單的注冊功能,這個腳本的大小估計都有10mb左右!因為腳本裡都是截取下來的圖!一個注冊腳本就要10mb,那麼一個自動化測試項目測試下來需要多少mb?另外,在添加對象方面上,錄制也顯得差強人意,因為靠錄制的方式添加對象,表面上來看十分快速,但是通過這種方式添加到對象庫中的對象,它們的命名都是qtp自動命名的,相當亂,還需要一個個去改,而且很多對象還是不需要的,qtp也給自動添加進來了,這樣,效率遠不如一開始就一個個添加對象,并根據規範為它們逐一命名再進行程式設計呢。對象庫這章還沒講到,屆時會在章節中引導讀者做一個有趣的實驗來證明,在這裡也不再闡述了。
關于文中提到的“錄制”兩字。—作者在文中提到的“錄制”是指以錄制的方式并配合使用其他qtp自帶的功能錄制出來的腳本,進而完成自動化測試腳本編寫的整個過程(線性腳本、結構化腳本都在此範疇之内),而不是指單一的錄制功能。舉個例子,比如qtp這個測試工具自帶了很多檢查點的設定與操作,其實在真正的項目應用中,是用不到的,而是靠代碼的方式去實作,絕非靠工具本身提供的功能去實作。關于檢查點,在這裡點到為止,後續的“驗證點”章節中,會詳細地講解靠代碼實作驗證點并且通過執行個體證明,為什麼實際項目應用中的驗證是從來不靠qtp自帶的檢查點功能的。
最後,有一點需要做聲明,本書的作者絕對沒有诋毀qtp的錄制功能,正是因為有了這項強大功能的開發與研究成果,才能讓自動化測試工具一步一步走上更高的高度。隻是作者覺得,“錄制”在實際的自動化測試項目的應用中幾乎沒有任何可發揮的餘地。因為本書并不是一本自動化測試工具功能的介紹書籍,而是一本融合實戰技術、項目實踐及經驗的指導書籍。
在下一個章節中,會對“qtp錄制”的核心做必要的介紹和講解,這些内容,讀者還是必須掌握的。
1.3.2 錄制功能更多的隻是新人學習時的利器
1.3.2.1 錄制相關功能隻需把握幾個重點
學習“錄制”隻是能更多的了解qtp這個自動化測試工具,但在自動化測試項目中幾乎沒有發揮的餘地。如果隻從實際項目角度出發,那是不是可以完全抛棄學習呢?是可以的。不過在本章節中,作者總結了一些關于“錄制”方面的重點知識點,這些重要的知識點不僅和“錄制”有關,它們和以後在具體的項目應用中也有關系。是以把這些知識拎出來作重點介紹。希望可以給讀者以啟發,本書也從本章節開始正式引領讀者去實踐qtp、實踐自動化測試項目應用。
1.add-in manager & bho manager
add-in和bho相關的知識點表面看似和“錄制”沒直接聯系,其實它不僅僅和“錄制”有關聯性,和很多知識點也同樣都有關聯,比如以後會介紹的對象庫,可以說這兩個一直伴随着qtp自動化測試項目。選擇将這兩個知識點放在“錄制”這章節介紹更加妥當,畢竟無論是“錄制”、“插件”、還是“bho”都是學習qtp一開始就要接觸的知識點。
在打開qtp之後,可以看到一個add-in manager 框(見圖1-14)彈出來,這是一個qtp插件管理器,每次啟動前需要選擇對應的插件(在插件名稱左側打鈎)才能進行測試。qtp預設自帶3個插件,分别是activex、visual basic以及web,其中屬web插件最重要,使用率最高,也是本書所用到的重點插件。如果需要使用其他插件,可以向官方購買,或由使用者自主定制自己的插件。加載新插件後,插件管理頁面中就會顯示新加載的qtp插件。
經常會在測試論壇上看到一些測試同行問“這個項目是用什麼語言寫的?應該選擇哪個插件做自動化測試?”。其實提出這個問題足以證明大家并沒有了解插件的真正含義和作用。
插件的含義與作用。
add-in的選擇是為了能夠成功識别對應插件的測試對象控件,也就是說插件的選擇是和被測對象控件有關的,以qtp應用最廣泛的web網頁測試而言,它與項目具體使用的是哪種語言沒有多大關系。但是對于windows桌面應用程式而言,插件的選擇是和開發語言有關系的。針對c++、java和.net程式,qtp都有相應的add-in提供,分别用于對應的語言開發的windows桌面應用程式。
一個執行個體:
需求:使用qtp的spy識别“51testing軟體測試網”首頁上的[登入]按鈕(webbutton)控件,如圖1-15所示。
注1:spy功能是qtp重要的一個機制,在後續的章節“object spy”中會進行詳解。這裡,隻給出該功能的位置及基本用法。
注2:spy的位置:進入qtp→上方菜單欄→tools→object spy→點選後彈出spy框。
注3:spy的基本用法:點選spy後會出現一個“手指頭”并重新切換到之前的頁面,用“手指頭”點選被測對象控件即可。

“51testing軟體測試網”是一個b/s架構的web網站,需要加載web插件(見圖1-14中的插件選擇狀況)才能夠正确識别網站中的對象。下面看一下選擇了正确的插件後,利用spy定位“登入”這個webbutton對象控件的結果,如圖1-16所示。
通過圖1-16,可以很清楚地看到控件識别成功了。“登入”這個對象控件的所有屬性盡在spy的掌握中。
那麼如果沒有選擇相對應的插件去進行識别會是什麼情況呢?首先如圖1-17所示,作者把web插件的鈎選去除,隻選擇visual basic插件。然後再次用spy去定位“登入”這個控件。
操作完畢,結果如圖1-18所示。
這就是選擇錯誤插件後,spy的識别圖。由于沒有選擇對應的插件,“小手指”都沒有辦法具體定位到“登入”按鈕這個webbutton控件對象,隻能把整個浏覽器識别為一個對象。
通過上述内容,相信讀者已經對插件有了深刻的了解。但是内容還沒有結束,你知道嗎?即使選擇正确的插件,有時仍然會出現圖1-18中的情況。如果以後發生類似的問題,解決辦法相當簡單,隻要關閉qtp和測試網頁,然後先打開qtp,再打開測試網頁即可解決!為什麼會這樣呢?說的簡單點就是,qtp和bho機制是挂鈎的。因為安裝完qtp之後,每次打開ie,浏覽器會自動加載bhomanager,而qtp在ie中識别對象是依靠一個名為bhomanager class的動态連結庫來完成的,如果是先打開ie再打開qtp,qtp就不能成功讀到bhomanager class這個動态連結庫,進而導緻qtp識别對象失敗。
https://yqfile.alicdn.com/0d11b1c1aa19bf5eaa8ecaf6d36268ffab7653c0.jpeg" >
what is "bho"?—bho(browser helper object,浏覽器輔助對象,簡稱bho)。bho是微軟推出的作為浏覽器對第三方程式員開放互動接口的業界标準,通過簡單的代碼就可以進入浏覽器領域的“互動接口”(interactived interface)。bho對象依托于浏覽器主視窗。實際上,這意味着一旦一個浏覽器視窗産生,一個新的bho對象執行個體就要生成。任何bho對象與浏覽器執行個體的生命周期是一緻的。其次,bho僅存在于internet explorer 4.0及以後版本中。bho是一個com程序内服務,注冊于系統資料庫中某一鍵下。在啟動時,internet explorer查詢那個鍵并把該鍵下的所有對象預以加載。
是以,請每位讀者要特别注意這裡的小細節,别疏忽了它。
2.record and run settings
它翻譯後的中文是:錄制與運作設定。即和錄制有關系又和運作有關系,它們和“add-in”及“bho”一樣,同樣會一直伴随着qtp自動化測試項目。
這個知識點從界面就可以很直覺地了解了,先看以下兩張圖(圖1-19、圖1-20)。
注1:record and run settings的位置:進入qtp→上方菜單欄→automation→record and run settings。
點選record and run settings後,會彈出一個視窗,視窗中有兩個頁籤,分别是web頁籤(圖1-19)以及windows applications頁籤(圖1-20)。
先介紹最常用的web頁籤,它用在b/s架構的系統中。作者已經在圖1-19中對每個選項進行了編号,讓我們對web頁籤下的各選項進行全面的了解。
(1)record and run test on any open browser。在任意打開的浏覽器上錄制和運作測試元件。
選中這個選項後,在錄制的時候,這個選項需要手動打開浏覽器,并且在錄制的過程中可以随時暫停錄制、修改、繼續錄制等。在回放的時候選擇了這個選項就會引申出一個問題了。
舉一個執行個體,假設目前計算機上同時開啟了兩個網頁a和b,錄制的腳本是網頁a的,大家都知道網頁隻能同時看一個,如果此時網頁定格在網頁b(也就是說你在看網頁b),你重新回到qtp并點選“f5”運作腳本,此時qtp其實是在網頁b上運作腳本的,而腳本裡的各個元素又是針對網頁a的,然後理所當然qtp就會一直卡在那裡不動直到等待時間超過後報錯,原因很簡單,qtp無法識别網頁b上的控件。是以,讀者以後千萬要避免類似的問題發生,解決辦法也很簡單,最好是在做自動化測試運作工作時隻開啟一個網頁,如果一定要開啟多個網頁,也請記得在運作前把網頁重新激活定格到被測試網頁中。
(2)open the following address when a record on run session begins。當開始錄制時打開下面輸入的位址。
選中這個選項後,會同時激活網址輸入框及圖中的“3”、“4”、“5”,在網址輸入框中輸入需要的被測網頁位址即可,此時qtp就會打開該網頁。
(3)open the following browser when a run session begins。當開始錄制時以下面選擇的浏覽器類型打開。
在選中了圖中的“2”後被激活,以下拉框形式選擇浏覽器類型,預設隻有1個浏覽器類型:microsoft internet explorer。
(4)do not record and run on browsers that are already open。在已經打開的浏覽器上不錄制和運作腳本。
在選中了圖中的“2”後被激活,可選項,預設打鈎,含義如上。
(5)close the browser when the test closes。在測試元件關閉後同時關閉浏覽器。
在web頁籤中最主要的選擇就是record and run test on any open browser和open the following address when a record on run session begins了。後者自動打開浏覽器,一般在初始錄制的情況下使用。同時,自動打開浏覽器也是為初級使用者提供的,完全是為了配合“錄制”這個功能而開發的。手工寫腳本的情況下,一定是選擇前者。在這裡先預告下,在qtp腳本開發中,打開浏覽器的函數是systemutil,在後續的章節中會詳細講解該函數,這個函數下的很多方法在實際項目應用中都相當實用。
接下來介紹windows applications頁籤,這個頁籤是關于qtp在錄制應用程式時的應用設定。作者已經在圖1-20中對每個選項進行了編号,下面對windows applications頁籤下的各選項進行全面的了解。
(1)record and run test on any open windows-based application。在任意打開的windows底層程式上錄制和運作測試元件。
原理和web一緻,不再重複闡述。
(2)record and run only on。隻在xx應用程式上錄制和運作。
選中這個選項後會同時激活圖中的“3”、“4”、“5”、“6”。
(3)applications opened by quick test。被qtp打開的應用程式。
在選擇了圖中的“2”後被激活,可選項,預設打鈎。在這裡要說明一下,被qtp打開的應用程式可以是由“6”中手工添加程式的方式也可以是由代碼的方式,代碼函數仍然是systemutil。
(4)applications opened via the desktop (by the windows shell)。通過快捷方式或快速啟動欄打開的程式(包括開啟錄制之前、之後打開的)。
在選擇了圖中的“2”後被激活,可選項,預設不打勾。這裡要注意一下,如果決定勾選這個選項,一定要勾選“5”(為什麼一定要勾選“5”會在下面講到),然後添加快捷方式或快速啟動欄圖示的實際路徑。
(5)applications specified below。在下方applications details裡指定程式路徑。
在選擇了圖中的“2”後被激活,可選項,預設打鈎。如果不打勾,則不會激活“6”,也就無法添加程式。在“4”裡講到必須勾選“5”就是因為這個原因,隻有勾選了才能在下面的application details space裡添加程式實際路徑、快捷方式實際路徑或快速啟動欄圖示實際路徑等。
(6)applications details space。程式詳情資料空間(space是作者自己加的)。
在選中圖中的“2”并勾選“5”後被激活。這個區域被激活以後有新增、編輯、删除3個按鈕,并且在添加程式完畢後以清單形式顯示并排列,如圖1-21所示。
下面看一下如何添加程式,點選添加按鈕(綠色的+号)後的效果,如圖1-22所示。
在點選添加按鈕以後就會彈出圖1-22中的界面。
application:這裡是添加程式具體路徑的地方,可以手動輸入,也可以通過右側路徑按鈕進行選擇。需要注意的是,這裡的路徑是需要定位到檔案名的,比如flight4.exe,如果是qq的話,就是qq.exe。
working folder:這裡是添加工作檔案夾的路徑,不用具體定位到檔案名。
program arguments:簡單的說就是輸入一個程式變量的編輯框,平時就算是“錄制”。
launch application:可選項,預設勾選,勾選後的效果是,在錄制的時候可以自動開啟程式。
include descendant processes:可選項,預設勾選,對于實際項目的應用同樣做不了貢獻,如果讀者感興趣,可以使用第2小章節中講到的f1定位跟蹤技術自行研究。
3.web event recording configuration
首先,公布下這個功能的入口處:進入qtp→上方菜單欄→tools→web event recording configuration,點選進入後會出現如圖1-23所示的界面:
該功能隻能應用于b/s架構的系統,在錄制時,對一些web事件進行設定,這個設定究竟是怎麼回事?設定後的效果是什麼?稍後,作者會舉一個例子,然後在51testing網站上選擇一個相對比較貼切的實際場景進行操作,讓讀者看明白。
先熟悉一下這個彈出的界面,首先了解一下event configuration level的概念,qtp把它預設分成3級:basic(最下面那格,也是預設的設定,圖1-23的顯示效果就是basic效果)、medium(中間那格)、high(最上面那格),要設定等級隻需要将遊标移動到相應位置即可。其次,可以看到有custom settings按鈕,這個按鈕就是使用者的個性化定制,在qtp預設的3個等級都不符合場景需求時,可以使用該功能(下文會對這個功能的要點作講解)。最後,default settings是恢複qtp預設設定功能。
對這個界面了解後,作者開始舉第一個例子,事先提醒一下,現在的event level是qtp預設的basic等級(選了等級後,等級名稱下會有些該等級的介紹,讀者可以自行檢視),大家設想這樣一個場景(相信大家在項目中應該也碰到過類似的場景):有一個線上學習考試系統,在購買課程頁面上顯示了很多課程資訊(如價格、有效期等),然後每個課程都有一個備注功能,要檢視備注内容則需要将滑鼠光标移上去并保持2秒鐘後,會以popup形式彈出備注框後才能檢視到。好了,有了這麼個需求,那現在需要用qtp驗證這個備注框的内容是否符合預期結果。首先肯定要做到的就是使其popup,手工操做是很簡單的,放上去等2秒就好了,但是用qtp不一樣,在basic等級下,qtp在錄制時是無法模拟到“放上去等2秒的操作的”。解決的辦法就是需要把event level提高到可以模拟這個操作的那個level。隻有通過該解決方案才能解決項目應用的實際問題,不然這個自動化測試用例就沒法實作成腳本!接下來,就從51testing網站挑選一個相對比較适宜的場景,錄一段腳本,一起來看看腳本效果。在這裡先知會一下,作者找了很久,實在沒找到51testing網站上有popup形式的控件,是以,作者的執行個體不是以popup形式的,不過原理是一樣的,而且還可以多了解不同的場景。先看看場景圖1-35所示。
圖1-24中作者用到的場景區域進行了标示,簡單介紹一下,這塊區域是一個資訊公告區,不是靜态的,是動态地從下到上滾動顯示的。然後當将滑鼠光标移動到某條資訊上時,整個資訊公告區就會變成靜态的了,點選後就可以檢視到那條資訊。現在提出需求:成功将滑鼠光标移動到[企業内訓]下的第2條資訊“圓滿完成上海西門子醫療器械有限公...”上面,等待0.5秒,待資訊公告區移動禁止後點選,這個需求很簡單,(注:這裡強調一下,等待0.5秒的需求是作者虛拟出來的,實際上滑鼠光标隻要放到資訊公告欄裡,資訊就會變成靜态的)。
現在開始分析,從手工操作的角度上來說,完成這個業務需求的時間不會大于2秒。步驟就是,滑鼠光标→移動到資訊上→等待資訊公告區從動态變成靜态→點選。但是從用qtp角度上來分析,就不會像手工操作那麼簡單了,難點就和popup例子一樣,如何能使qtp模拟到滑鼠光标停止在第2條資訊上0.5秒的操作。其實就是将event level提高或自定義至可以完成這個需求。basic這個預設的等級完成不了這個需求,調高2級至high這個等級就可以了,反正這個執行個體隻是為了給讀者看看實際效果,原理之前就已經講述了。大家隻要知道,項目中遇到搞不定的需求隻要把等級提高就行,如果qtp預設設定的幾個等級都無法滿足項目中的需求那就進行個性化定制(這方面有些重點内容等後面會講解),即可完美搞定!實作的效果如圖1-25所示。
我們可以看到,用basic等級錄制出來的腳本根本無法實作滑鼠光标停留在第2條資訊上的需求,盡管在錄制的時候滑鼠光标是停留了0.5秒後再點選的,但是qtp無法錄制到。但是用high等級就不同了,滑鼠光标停留的動作就被錄制到了,函數是fireevent,參數是onmouseover,它就是傳說中的“滑鼠懸停”事件。預告下,在下面的“1.3.4小節”中會講關于fireevent函數結合該節内容做一個執行個體示範,這個函數事件的知識點還是比較常用的,敬請期待吧!
好了,現在講一下如果用high等級都滿足不了需求的情況下,就需要個性化定制了,點選custom settings按鈕後進入如圖1-26所示的界面。
圖1-26所示左邊是qtp的對象清單樹,包含了web中qtp所能識别的所有控件,可以通過add object添加object控件。右邊是與控件相對應的執行個體,包含了相對應的控件的滑鼠光标錄制屬性,可以通過add event來添加event類型,點選ok儲存設定。個性化定制完畢後就可以開始錄制腳本了。
4.腳本錄制的一些良好建議和注意事項
上文中的1、2、3都是讀者必須了解,并在項目實際應用中使用價值比較高的“錄制”方面的知識點。最後,作者對“錄制”進行總結,并根據實際經驗給出一些意見。
在開始錄制之前,應關閉錄制會話不需要的所有浏覽器、網頁或應用程式,以免造成不必要的困擾,進而影響工作效率。
如果在網站上進行錄制,應确定該網站的安全區域。當在web浏覽器中錄制時,浏覽器可能用安全警告對話框提醒,這樣在腳本運作時就會由于對象庫中沒有事先添加安全警告對話框這個對象而導緻腳本運作失敗。解決方案有兩個:一是選擇禁用/啟用這些對話框,二是将安全警告對話框添加進對象庫。
事先明确好準備在錄制和運作測試時,如何打開web浏覽器或應用程式。可以選擇讓qtp打開一個或多個指定的web浏覽器或應用程式,也可以在已經打開的web浏覽器或應用程式上錄制和運作,但是務必事先明确,以免發生不必要的“意外”。
如果要對web對象進行錄制,必須對該對象的值進行更改或初始化還原,以便使qtp錄制到該步驟。例如,要錄制weblist對象的選擇操作,如果頁面上已經選擇過某選項了,就必須單擊該下拉清單,滾動到最初的那個預設選項(當然,這一步可别錄進去啊!),然後再重新選擇你準備選擇的備選項(這叫還原)。如果不還原,可能會導緻腳本在運作時無法通過。
1.3.2.2 為什麼說錄制是學習利器,有根有據,請聽我細細道來
作者一直認為學習“錄制”相關方面的知識絕大數時候不是為了今後能在實際項目中應用,而是能對qtp做一個整體的了解,包括qtp的一些原理、qtp的一些主要功能、用qtp進行自動化測試的基本業務操作流程等。可以這麼說吧,“錄制”隻能說是用qtp做自動化測試項目的“啟蒙老師”,有将“徒弟”引進門的功勞,但最多也就這點功勞了,因為做實際項目“錄制”是不夠用的,以後必須進行不斷深造。
作者在這裡還要給大家分享一個小小的經驗和技巧。錄制這個單項且獨立的功能,在以後具體做項目寫腳本的過程中是有輔助作用的,也可以說是小小的“投機取巧”吧。在前面的章節中就有這麼一個理念,那就是“要以代碼的方式寫腳本,但不要硬記代碼,有問題用f1查找”!首先,作者保證這個理念肯定是正确的,但是,有時候會遇到這麼一個窘境,先讓我們看圖1-28所示。
對[同意網站服務條款]這個webcheckbox控件“打鈎”或者“取消打鈎”的代碼分别是:
'勾選[同意]的代碼如下:
browser("51testing軟體測試論壇 軟體測試 |").page("51testing軟體測試論壇 軟體測試 |").webcheck box("同意").set"on"
'取消勾選[同意]的代碼如下:
browser("51testing軟體測試論壇 軟體測試 |").page("51testing軟體測試論壇 軟體測試 |").webcheck box("同意").set"off"
很明顯,需要“打鈎”的話set方法後面跟參數“on”;如果需要“取消打鈎”,set方法後面跟參數“off”。在手寫代碼時,這個很好記住,參數on是打鈎、參數off是取消打鈎。但是,參數後面的“on”或者“off”是大小寫就沒那麼好記了,經常容易忘記或混淆!如果在該寫成大寫的時候誤寫成小寫,那麼就相當于參數寫錯,最後運作腳本肯定是過不了!如果你有經驗,能反應過來是大小寫問題;如果沒經驗,估計需要折騰一陣子,說不定還發現不了到底是哪裡出錯了,象遇到類似的問題有什麼辦法應對呢?建議讀者在以後的項目測試過程中,可以參考下面的小技巧。
如果遇到上述的情況,錄制功能就可以幫上大忙了,錄制下這個控件的操作,正确的代碼就會顯示在qtp中!錄制出來的代碼是不會出錯的!
ok,這就是作者在做項目中的一些經驗,在這裡分享給讀者,通過這個小技巧就可以在具體的腳本編寫過程中無往不利!
俗話說,打鐵要趁熱!接下來再一起看第二個執行個體,先看一下圖1-28所示。
圖1-28是51testing論壇的一個搜尋功能,可以看到頁面中有一個webradiogroup控件,這個控件内一共存在4個選項(所有選項都同屬于一個控件)。預設選中的是第1個選項“文章”,假設需求要求将所有選項從左到右全部點選一遍,從第2個選項開始點起,點完第4個選項以後再點選第1個選項。應該說,完成這個需求很簡單,請看下面的代碼:
'預告:作者強烈推薦在腳本的編寫過程中盡量多使用with函數,益處良多,在以後的章節
'中會進行介紹,并且在本書中,with的使用率将會非常高!
with browser("51testing軟體測試論壇 軟體測試 |")._
page("51testing軟體測試論壇 軟體測試 |")
end with
在寫腳本的時候,webradiogroup控件下的選項可以簡寫,如“#0”等,可以說提供了相當大的友善。但是,新手往往由于不熟悉這些數字的規律,是以不敢亂用簡寫,在這種吃不準但又想使用簡寫,且不想花太多時間去研究的情況下,上面的“小技巧”又可以幫助我們達成目标并提高效率,隻要簡單的錄制一下,qtp就會準确、快速地獲得這些選項的編号。
1.3.3 錄制時需注意模式的切換
1.3.3.1 3種錄制模式的基本介紹
在這一小節中,将要介紹qtp中的3種錄制模式:正常錄制、模拟錄制、低級錄制。
1.正常錄制模式
qtp預設的錄制模式,這種錄制模式是qtp最突出的特點,是直接對對象的操作,可以說此類模式繼承了對象模型的所有優點,能夠充分發揮對象庫的威力。它通過識别程式中的對象來代替以前依賴識别螢幕坐标的形式。但是正常模式并不能保證識别程式中所有的對象,是以,仍然需要其他兩種模式來補充。在錄制完之後,不管再次打開的對象位置在哪(簡單的說就是不具體記錄對象控件的坐标,但是被測頁面上必須存在該控件對象),它都能執行到。開啟正常錄制模式的方式。
(1)qtp上方菜單欄→automation→record。
(2)直接使用快捷鍵“f3”。
(3)在qtp界面上點選正常錄制圖示,如圖1-29所示。
2.模拟錄制模式(analog recording)
此類模式錄制了所有鍵盤和滑鼠的精确操作,對于正常錄制模式不能錄制到的動作,可以使用模拟錄制模式來彌補。例如,錄制一個滑鼠光标拖動的動作,正常錄制模式無法錄制這個業務操作,這時就可以考慮切換到模拟錄制模式記錄滑鼠光标的軌迹。模拟錄制模式錄制下來的腳本檔案比較大,而且依靠這種方式是不可以由qtp進行編輯的。選擇模拟錄制模式,如果在回放時,改變了螢幕的分辨率或者視窗/螢幕的位置, 回放就會失敗。開啟模拟錄制模式的方式。
(1)前提是開啟正常錄制模式。
(2)qtp上方菜單欄→automation→analog recording。
(3)直接使用快捷鍵“shift+alt+f3”。
(4)在qtp界面上點選模拟錄制圖示,如圖1-30所示。
3.低級錄制模式(low level recording)
此類模式是用來錄制qtp不能識别的環境或對象。它不止錄制了滑鼠和鍵盤的所有操作,對對象的位置要求也非常嚴格。按此模式錄制的對象都以windows和winobject的形式存在。qtp按照螢幕上的x坐标和y坐标錄制該對象,将所有父類對象錄制為windows測試對象,将所有的其他對象錄制為winobject測試對象。它們在activescreen中顯示為标準windows對象,并且在錄制回放時,對象的坐标有任何一點改變就會失敗。這類方式适用于qtp不能正常識别對象時的應用,主要是記錄坐标的位置,可以對qtp不支援的對象進行坐标記錄。但是不到萬不得已的時候,不推薦使用此模式。開啟低級錄制模式的方式。
(2)qtp上方菜單欄→automation→low level recording。
(3)直接使用快捷鍵“ctrl+shift+f3”。
(4)在qtp界面上點選低級錄制圖示,如圖1-31所示。
以上就是qtp的3種錄制模式,讀者可在進行錄制時,根據實際的業務需求進行靈活地切換運用。隻有在正常模式下不能錄制自己想要的業務操作的時侯才可以使用模拟錄制和低級錄制,模拟錄制和低級錄制比正常錄制需要占用更多的硬碟資源。一般先使用正常錄制模式錄制腳本,碰到正常模式不能錄制到的腳本時再切換到模拟錄制或低級錄制來錄制這些步驟,之後别忘記再切換回來。
實際上,遇到正常模式下無法錄制的解決辦法還有很多,比如在上一個小章節中提及的web event recording configuration實作一些滑鼠事件,諸如onmouseover事件等。
1.3.3.2 analog recording和low level recording的差別與規則
在1.3.3.1小節中,介紹了模拟錄制模式和低級錄制模式,細心的讀者可以發現,這2個錄制模式之間有很多的相似之處,容易産生混淆。其實,它們之間無論在功能還是實際用法上都有很大的差別。
1.analog recording(模拟錄制)
将“模拟錄制”應用于要在錄制期間錄制滑鼠光标的實際移動的應用程式。這些可能包括繪制滑鼠簽名或者使用通過拖曳滑鼠光标建立圖像的繪圖應用程式等。
模拟錄制模式分為兩種:一種是相對于指定視窗的錄制,另一種是相對于螢幕的錄制。
相對于指定視窗錄制。選擇相對于指定視窗錄制,就會隻錄制滑鼠、鍵盤的指定視窗内的所有動作,而不會錄制在指定視窗外部執行的任何單擊或滑鼠光标移動。當使用這種模式時,qtp不會捕獲任何active screen 圖像。
相對于螢幕錄制。可以錄制在整個螢幕内所做的所有動作,包括點選windows工作列上的qtp圖示,但在qtp視窗内所做的操作不會進行錄制。當使用這種模式時,qtp将捕獲你在其中進行錄制的視窗的最終狀态的active screen 圖像。
使用“模拟錄制”錄制的步驟被儲存在單獨的資料檔案中。該檔案與在其中錄制模拟步驟的操作或元件一起存儲,并且在以“模拟錄制”模式進行錄制時,qtp将向測試或元件添加一個調用所錄制的模拟檔案的“runanalog”語句。相應的active screen 将顯示在模拟錄制會話期間執行的最後一個模拟步驟的結果。
2.low level recording(低級錄制)
将“低級錄制”應用于在不受qtp支援的環境或對象上進行錄制應用程式。或者當需要在應用程式螢幕上錄制操作的精确位置時,也請使用“低級錄制”。
當以正常模式錄制時,不用關心對象控件具體在什麼位置,即使該對象控件每次都移動到螢幕上的新位置也沒關系。但是,如果對象控件的位置方位對于測試或元件非常重要,請切換到“低級錄制”以使qtp能夠按照螢幕上的x坐标和y坐标錄制該對象。這樣,在運作腳本的時候,該步驟隻有在對象控件位于正确的位置時才能通過。
前一個小節中提到過,當使用“低級錄制”時,qtp将所有父類對象錄制為windows測試對象,将所有其他對象錄制為winobject 測試對象。它們在active screen中顯示為标準windows對象。下面列舉“低級錄制”對每個測試對象支援的方法。
winobject測試對象:click、dblclick、drag、drop、type 。
windows測試對象:click、dblclick、drag、drop、type、activate、minimize、restore、maximize 。
以“低級錄制”模式錄制的每個步驟都顯示在關鍵字視圖和專家視圖中,而“模拟錄制”僅僅錄制關鍵字視圖中那個調用外部模拟資料檔案的步驟。
總結。當選擇“模拟錄制”或“低級錄制”時,需要參考一定的規則性,才能做到事半功倍的效果,在遇到實際問題時仔細考慮以下規則。
隻有當qtp的正常錄制模式不能準确錄制和滿足業務操作時,方可使用“模拟錄制”或“低級錄制”。
“模拟錄制”和“低級錄制”要求比正常錄制模式更多的磁盤空間。
對于特定的業務步驟,可以在錄制會話期間切換到“模拟錄制”或“低級錄制”。在以“模拟錄制”或“低級錄制”模式錄制了必要的業務步驟之後,就可以傳回到正常錄制模式來完成錄制會話的其餘部分。
1.3.4 有必要讓你掌握尤其重要的qtp回放機制
掌握了qtp錄制的原理那就一定要掌握qtp的回放原理,後者的重要性遠遠勝于前者,因為在做實際項目的時候可以抛棄錄制,但是腳本回放永遠抛棄不了!qtp的腳本回放機制勤勤懇懇地服務于每一次自動化測試,如果失去它,自動化測試将不複存在!
那麼qtp的回放機制大緻是一個怎麼樣的概念呢?最簡單的說法就是“回放機制是封裝對象與真實對象的比對”。
深化點講就是,qtp根據腳本中記錄下來的對象操作的順序進行回放(再通俗點的說法就是,在沒有特殊情況下是從上到下執行,一句一句執行的,特殊情況就是,比如遇到function時會“跳”)。qtp從腳本中讀取到該對象,并根據對象的層次和名稱到對象庫中尋找相同名稱的測試對象,在對象庫找到相應的測試對象并獲得該測試對象的屬性,然後根據這個測試對象的屬性,在運作的網頁或應用程式中進行比對,尋找運作時對象。如果成功比對上,再根據腳本中記錄的該對象的方法、動作和參數值進行應用,如果未能比對上,則在超出了等待時間後報錯,腳本即宣布運作失敗。
在這裡公布一下qtp的回放功能怎麼開啟。
(1)qtp上方菜單欄→automation→run。
(2)直接使用快捷鍵“f5”。
(3)在qtp界面上點選run圖示,如圖1-32所示。
了解了qtp回放機制的原理後,下面一起來掌握一些關于qtp回放機制的重要相關設定,并做一些深入擴充。作者總結和提煉了4個相對比較重要的設定,這些知識點在以後的實際項目應用中也經常會使用到。
1.file→settings→run
順利進入設定頁面後可以對運作相關方面進行各類不同的設定,頁面效果如圖1-33所示,這個頁面下的所有設定在項目應用中都非常重要,下面對這些設定進行分解。
(1)data table iterations. qtp自帶的資料表功能在運作時的疊代設定,如圖1-34所示。
圖1-34中一共有3行資料,qtp預設選中的是run on all rows選項,這種情況下,在運作時,qtp則會根據行數來決定疊代運作多少次,如果有3行資料則運作3次。這裡要注意一個情況,如果圖1-34中有第4行資料,但是資料的值是空,則qtp會運作4次,隻是參數的值是空值。
如果激活run one iteration only選項,qtp在運作時隻運作第1行資料,無論後面還存在多少行資料,它隻執行第1行的資料且隻運作1次。
最後,如果激活run from row xx to xx選項(假設是3~5),qtp則讀取第3~5行的資料并運作3次,從第3行開始執行直到第5行結束。
(2)when error occurs during run session:當在運作期間發生錯誤時。
pop up message box (預設)qtp彈出一個錯誤資訊提示框,并顯示對應錯誤。必須去掉這個 錯誤提示框後才能繼續運作腳本。
proceed to next action iteration 繼續執行下一個業務行為疊代。舉個例子,qtp自帶資料表中有2行資料,目前執行的是第1行資料(即第一次疊代),運作期間遇到錯誤後,如果此時激活的是這個選項,那麼qtp将直接跳過本次疊代,進入第二次疊代(執行第2行資料),如果第二次疊代又發生了錯誤,此時由于資料表中并沒有第3行資料也就沒有了後續的疊代操作,是以腳本運作結束。
stop run 這個相當直覺,當發生錯誤,則停止腳本運作。
proceed to next step 當發生錯誤時,跳過本業務步驟,進入下一個業務步驟,即腳本代碼的下一行。
(3)object synchronization timeout:xx seconds. 同步的延時時長(預設20秒)。
(4)disable smart identification during the run session. 預設不勾選,若勾選則在運作期間屏蔽智能識别功能,也就是說,即使測試對象開啟智能識别功能,隻要在運作時勾選這個選項,智能識别就不會生效,可以說這個功能是一個總閥門。關于智能識别功能會在後續的“對象庫”章節中做介紹。
(5)save image of desktop when error occurs (if test is run by the hp business process monitor). 在出現錯誤時,截圖并在qtp report中反應。該功能隻限于業務元件的腳本運作,關于業務元件腳本的位置如圖1-35所示。
要建立或者打開一個業務元件的必須條件是qtp和qc聯通,否則會彈出錯誤資訊,如圖1-36所示。
另附qc中的業務元件子產品初覽(圖1-37、圖1-38、圖1-39)所示。
上圖就是qc9.0中的業務元件子產品位置和業務元件概念介紹,在這裡作者對這部分内容不多做闡述,如果有興趣的讀者可以自行研究,或問“百度大叔”或在51testing論壇發帖等等。
2.file→settings→web
這個設定隻針對b/s架構的系統,頁面效果如圖1-40所示,這個頁面下隻有圖中的“區域1”相對重要。下面,作者對“區域1”進行講解。
browser navigation timeout:xx seconds:設定運作測試步驟之前等待網頁加載時間的最大值(預設60秒)。這個時間具體有什麼用呢?舉個直覺點的例子,假設有一個腳本,内容很簡單,就兩個步驟,“1、進入51tesing首頁,2、點選注冊按鈕”,而通路網站的寬帶最近又出了點小問題,打開51testing網站的首頁每次都非常慢,至少需要2分鐘(120秒),那麼此時qtp腳本在運作時就會報錯。為什麼?因為預設等待網頁打開的時間已經超過了60秒,此時qtp就會執行下一個步驟“點選注冊”,但是由于網頁還沒有打開是以走到下一個步驟的時候在頁面上找不到“注冊”這個測試對象,最終導緻運作失敗并報錯。是以,此時的解決方案就是打開這個選項,然後将逾時時間設定得更大。讀者以後如果在項目中遇到類似的問題請記得這個小小的實用設定。
這個設定在qtp 10.0的幫助文檔内這樣說明“the maximum time (in milliseconds) that quicktest waits for a web page to load before running a step”。請大家注意下劃線部分,文檔内标注的時間以毫秒為機關,但其實文檔内寫錯了,實際情況是以秒為機關的,和qtp實際界面(圖1-40)中的一樣,實際界面中寫的就是seconds而非milliseconds,請讀者注意!
3.tools→options→run
這是第二個關于腳本運作相關方面的設定,順利進入界面後的效果如圖1-41所示,這個頁面下的大多數設定在項目應用中也經常會使用到,下面,對這些設定進行分解(沒有辨別區域的則說明不重要或基本不會使用)。
(1)run mode (normal or fast):qtp在腳本運作時一共分兩種運作模式。normal模式是一種正常的運作模式,fast則是一種快速運作模式。
先一起看一下正常運作模式,可以從圖1-41中看到該模式下有這麼一個設定“delay each step execution by:xx milliseconds”,這是什麼意思呢?其實很簡單,實際效果就是在運作回放時每一個步驟之間停頓的時間,預設是0,那也就是沒有停頓,如果将其設定成2000(這裡是以毫秒為機關的),再回放時,那麼第1個步驟結束後,qtp就會停頓2秒鐘時間再執行下一個步驟。
好了,再讓我們看一下快速運作模式,這種模式肯定就不可能有停頓的可能了,除了這個之外,作者在這裡還要擴充一下知識面,如果以qc調用qtp腳本并執行,預設且隻可能是以fast模式運作的。
最後,再給各位讀者看一下兩個模式間的一個差別,如圖1-42所示。
作者收到過很多測友提出的一個相同的問題,就是為什麼在運作時沒有黃色的箭頭,是不是qtp有bug?時有時無的。其實,出現這個問題就是這個設定的問題,如果選擇了fast,在運作的時候是不會出現黃色箭頭的,切記!很多新人将運作模式設定成fast了,見沒了黃色箭頭也不會想到是這個設定引起的,還以為是qtp的bug呢。
(2)submit a defect to quality center for each failed step:任何一個步驟出錯自動送出缺陷至qc。前提條件:qtp和qc連接配接成功,否則是灰色的。
(3)view results when run session ends. 預設勾選,當腳本運作結束後自動彈出report報告。相反,把鈎取消掉就不會彈出report了。
(4)stop command shortcut key. 停止運作的快捷鍵設定,預設是ctrl+alt+f5組合鍵,并可自行設定。别小看這個快捷鍵,如果在腳本運作的時候想使其停下來,一定要用快捷鍵,想靠點選圖示是很有難度的,自己試試就知道了,特别是長腳本,這也算是個小經驗吧。
4.qtp的兩種回放模式設定
當在回放qtp的時候,是否注意過qtp在回放的時候滑鼠光标是沒有運動的,有些讀者肯定會問,既然經常要進行click各種對象的操作,那為什麼滑鼠光标沒有動,而qtp回放的時候卻可以成功的點選頁面上不同方位的對象按鈕呢?其實qtp有兩種回放模式:
event模式事件跟蹤;
mouse模式滑鼠跟蹤。
event模式就是平時預設用的模式,也就是事件跟蹤模式。實際上,qtp的click方法隻是觸發了對象的click事件,而并未真正通過滑鼠光标來進行點選按鈕。我們使用的是mouse模式的話,我們會看到回放的時候,滑鼠光标是跟着對象走的,也就是滑鼠光标跟蹤模式。
下面來具體看一下是如何切換回放模式的,切換回放模式有兩種方法。
(1)修改qtp的options設定。
我們進入到tools→options→web→advanced ,然後清單拖到最下面可以找到run settings下的replay type,如圖1-43所示。
可以看到qtp預設的回放模式是event,也就是事件跟蹤。如果現在切換到mouse,點選确認後,回放時滑鼠光标就會進行跟蹤,讀者可以試一下。
(2)以代碼控制(作者推薦該種方式)。
為什麼推薦這種方式,因為這種方式可以在qtp運作時根據個性化需求來進行控制,随時可以進行開和關,使用第一種方式就不能夠達到這種效果,代碼如下:
setting.webpackage("replaytype") = 2
這句程式的意思就是把回放模式設定為2。1代表事件跟蹤模式,2代表滑鼠光标跟蹤模式,現在應該很清楚了吧,這樣就可以在qtp運作時個性化定制回放模式了。
那講到這裡,肯定會有讀者問,那滑鼠模式有什麼用,我們平時預設的事件和跟蹤模式不是都夠用了嗎?
接下來就說一下,為什麼以及何時要使用滑鼠跟蹤模式。舉些執行個體,如qtp運作時觸發了click事件後,應該彈出頁面,卻被ie給攔截了。而手工點選可以成功;還有當需要操作滑鼠右鍵時等這些情況都可以臨時把回放模式從事件跟蹤模式切換成滑鼠跟蹤模式,讓我們來看下操作滑鼠右鍵的執行個體示範吧。
需求:實作右鍵點選baidu首頁中“關于百度”的連結
(1)首先,我們把這個連結對象添加到qtp對象庫中,如圖1-44所示(對象庫相關内容在後續章節介紹,這裡不多做闡述)。
(2)添加完之後,輸入腳本,代碼如下所示:
setting.webpackage("replaytype") = 2
browser("百度一下,你就知道").page("百度一下,你就知道").link("關于百度")._
fireevent "onclick",,,micrightbtn
(3)回放之後就可以看到已經成功點選了滑鼠右鍵,如圖1-45所示。
不知道還記不記得前面講到要結合内容進行fireevent這個方法的示範,在這個執行個體中,我們就用到了fireevent這個方法,它是一個非常有用的方法,經常會在項目應用中使用到,在這裡作者先附上一些關于這個方法的簡單介紹,如圖1-46所示。
總結:本小節講述了qtp的回放原理和項目應用中的相關設定,希望讀者能夠吃透這些知識點,并能在以後做項目測試時舉一反三。
1.3.5 總結
本章節的内容主要講的是qtp的錄制與回放,市面上,任何一本書都會有這部分的内容。但是,作者對這部分内容進行了提煉,把其他書裡的那些幾乎等于qtp工具介紹的内容全部剔除,因為那些内容在實際的項目應用中幾乎不會用到,保留了能切實在項目中用到的内容,通過自己的實戰經驗配合大量案例、執行個體(幾乎每一個知識點都有例子)進行細緻地講解,希望讀者在學習了本章後,能對qtp這個自動化測試工具的操作,以及如何把工具融合實際項目上有個整體的把握。雖然剔除了很多不需要的内容,但是,由于介紹的是qtp的源頭(就好比本章節标題一樣“qtp的開關”)而且配合了大量的執行個體,圖文并茂,是以在完成本章節的編寫後才發現原來還是需要用到那麼大的篇幅才能将重要的知識點講清楚、講透。
在設計練習題的方面,作者思慮許久,考慮到本章節内容的性質,決定在本章節的鞏固練習題中不設定實際操作題,本章節的練習題如果要出成操作題,無非就是傳統的“錄制與回放”,這樣就會不由自主地偏離作者的原有思想。是以,作者決定以選擇題(單選和多選)、判斷題、排列題等各類有趣的形式出一份類似exam一樣的概念理論題,這些所謂的理論題其實是對整個章節内容知識點的貫穿,希望能起到鞏固與複習的作用。
知識點鞏固和舉一反三練習
一、知識加強鞏固趣味題之過5關(注:選擇題可能是單選也可能是多選)
1、<排列題> 請排列qtp業務操作及執行流程的順序。 ( )
a、錄制 b、打開浏覽器 c、回放 d、打開qtp
2、<選擇題> qtp的兩種腳本運作模式分别是normal和fast,它們之間的差別是什麼?請在下面4個選項中做出正确的選擇。 ( )
a、以qc調用的方式執行腳本,運作模式是fast。
b、腳本運作時,如果左側有黃色箭頭,則代表這種運作模式是fast。
c、normal運作模式的執行速度最快。
d、可以在normal運作模式中設定間隔時間,機關是毫秒。
3、<選擇題>請在以下4個選項中選擇正确的選項。 ( )
a、qtp停止運作的快捷鍵是ctrl+alt+f5,但不提供個性化設定。
b、qtp具有event和mouse兩種回放模式。
c、qtp具有slow、normal和fast 3種運作模式。
d、qtp具有兩種錄制模式,它們是analog recording和low level recording。
4、<選擇題> 請在以下4個選項中選擇錯誤的選項。 ( )
a、假設在運作設定中選擇run on all rows選項,在qtp的data table中建立4行資料,其中第2行的值為空,則qtp在執行兩次疊代後運作結束。
b、如果激活run one iteration only選項,qtp在運作時隻運作1次
c、browser navigation timeout:xx seconds就是設定運作測試步驟之前,等待網頁加載時間的最大值,超出了該值後腳本直接退出并報錯。
d、qtp的運作模式設定具體位置在:tools→options→web→advanced→run settings下的replay type。
5、<選擇題> 正确開啟模拟錄制(analog recording)的方法是: ( )
a、qtp上方菜單欄→automation→analog recording。
b、直接使用快捷鍵“shift+alt+f3”。
c、在qtp界面上點選模拟錄制的圖示。
d、以上都是。
二、知識加強鞏固趣味題之斬六将(讀者有權審判它們的對錯)
1、setting.webpackage("replaytype") = 2,這段代碼可以靈活控制qtp的回放模式,“2”代表event跟蹤模式,那麼如果設定成“1”的話,qtp就會切換到mouse跟蹤模式。( )
2、qtp在錄制過程中,遇到部分web事件無法模拟操作,此時的解決方案就是進入web event recording configuration設定框并将event configuration level提升至最高的high等級即可解決所有問題。( )
3、低級錄制模式分兩種:其中第一種是相對于指定視窗的錄制,另一種是相對于螢幕的錄制。( )
4、在開始錄制之前,應關閉錄制會話不需要的所有浏覽器、網頁或應用程式。( )
5、開啟模拟錄制模式前的必要條件是開啟正常錄制模式。( )
6、使用低級錄制前無須開啟正常錄制模式,直接使用快捷鍵ctrl+shift+f3即可。( )
作者認為,必須連過5關連斬6将才算切實掌握了本章節的内容,qtp“錄制與回放”的重點,有一點差錯都算闖關失敗!
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。