天天看點

《精通QTP——自動化測試技術領航》—第1章1.4節認清并請遠離QTP的腳本錄制模式

本節書摘來自異步社群《精通qtp——自動化測試技術領航》一書中的第1章1.4節認清并請遠離qtp的腳本錄制模式,作者餘傑 , 趙旭斌,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

1.4 認清并請遠離qtp的腳本錄制模式

精通qtp——自動化測試技術領航

階段要點

 了解keyword view結構。

 擺脫keyword view。

 熟練掌握expert view的代碼結構。

1.4.1 qtp的兩種視圖及思維轉換

從本章節開始,讀者将真正開始徹底擺脫腳本錄制,正式走向腳本開發的台階。在開始講解qtp腳本開發之前,首先需要詳加介紹expert view這個視圖,這個視圖是qtp官方指定的腳本開發唯一認可的視圖。那麼,以何為出發點以及如何介紹expert view這個視圖呢?決定以抛磚引玉的方式,利用腳本錄制視圖keyword view形象地引出腳本開發視圖expert view。

相信隻要稍許接觸過qtp的讀者就一定知道qtp提供兩種視圖,一種是keyword view(關鍵字視圖),另一種是expert view(專家視圖)。mercury公司開發兩種視圖的本意是想讓不同類型的人使用不同類型的視圖。接下來分别對這兩個視圖進行講解,并開始抛磚,直到引出一塊良田美玉。

1.keyword view(關鍵字視圖)

通過關鍵字視圖(一種圖形化的視圖),qtp提供了一種子產品化的表格格式,建立和檢視測試或元件的步驟。在錄制腳本的過程中,使用者在應用程式上執行的每個步驟,在關鍵字視圖中記錄為一行,這樣使用者就可以輕松地修改任何一部分業務步驟。在這裡拿“百度”的首頁舉一個例子,業務操作分3個步驟:

點選“圖檔”連結;

在圖檔搜尋欄中輸入“鳳姐”;

點選“百度一下”。

在完成了這3個步驟後,關鍵字視圖将包含下列行,如圖1-47所示。

《精通QTP——自動化測試技術領航》—第1章1.4節認清并請遠離QTP的腳本錄制模式

圖1-47中可以看到關鍵字視圖非常直覺有效,使用的使用者可以很清晰地看到被錄制對象的錄制層次及運作步驟。但是,如果想自動化完成一些複雜的業務操作,在這張視圖裡是絕對不可能的,那就必須切換到專家視圖裡才行。專家視圖等一切事宜就暫且擱置一下。先掌握關鍵字視圖的界面、原理和工作機制。

在關鍵字視圖中,一共分4列:item、operation、value和documentation。

item:記錄了所有對象。

operation:該對象的操作。

value:對象操作所用到的值。

documentation:qtp自動生成的描述語句,描述了是什麼對象,做了什麼,怎麼做。

關鍵字視圖的介紹馬上就要結束了,最後作者分解這個視圖(語句會很随意)後會直接進入專家試圖的解說。前面說過“在錄制腳本的過程中,使用者在應用程式上執行的每個步驟在關鍵字視圖中記錄為一行”,在本例中一共記錄到6個步驟,如下:

打開浏覽器;

進入百度首頁;

點選[圖檔]連結;

進入圖檔頁面;

在[搜尋框]輸入“鳳姐”;

點選[百度一下]。

2.expert view(專家視圖)

瞬移成功,首先肯定是要講專家視圖的工作原理,“qtp在關鍵字視圖中的每個節點在專家視圖中對應一行腳本”。讀者可能一下子不明白這句話,那先來看兩段代碼,第一段代碼是将關鍵字視圖的工作原理用在專家視圖上的錯誤代碼,轉換後的腳本如下:

browser("百度一下,你就知道")

'圖1-47中頁面1部分

page("百度一下,你就知道")

link("圖 片").click

'圖1-47中頁面2部分

page("百度圖檔—全球最大中文圖檔庫")

webedit("word").set"鳳姐"

webbutton("百度一下").click

再看一下專家視圖中正确的代碼:

browser("百度一下,你就知道").page("百度一下,你就知道").link("圖 片").click '句1

browser("百度一下,你就知道")._

page("百度圖檔—全球最大中文圖檔庫").webedit("word").set "鳳姐" '句2

page("百度圖檔—全球最大中文圖檔庫").webbutton("百度一下").click '句3

看完這兩段代碼以後,再回過頭來了解專家視圖的工作原理,專家視圖和關鍵字視圖是完全不同的,用通俗點的講,專家視圖并不像關鍵字視圖那樣,每個步驟都在視圖中記錄成一行,在專家視圖中,必須定位到業務操作最終的對象,并且每一句的結束,以及最終的對象的業務行完畢為基準。在這裡,最終的對象就是節點,專家視圖中的一句代碼是關鍵字視圖中好多個步驟的結合。而那段作者自己僞造的代碼就不是,每一句都不完整,要麼有頭沒尾,要麼無頭有尾,這就是keyword view和expert view最根本的差別,下面,一句句看專家視圖中的代碼構成,先以“句1”來說,“句1”中集合了3個對象。

browser—該對象如果出現必定是第一層,可以把它想象成打開的一個指定浏覽器,具體哪個浏覽器那麼就由後面括号裡的參數決定,如:browser("百度一下,你就知道"),這樣qtp就能很準确地識别到底打開的是哪個浏覽器了。

page—浏覽器下肯定有各種各樣的網頁。那要定位這個對象也就很簡單了,和上面一樣,在後面的括号内加參數,如:page("百度一下,你就知道"),這樣qtp就知道了,原來是要定位一個叫“百度一下,你就知道”的網頁,然後其他網頁會一概不理!

link—在定位了前兩個對象後,終于可以定位到要進行業務操作的對象了。可是,頁面上如果有好多link呢,怎麼辦?隻能和之前一樣,在後面的括号内寫進參數,如link("圖 片"),這樣qtp就不會亂了!好了,在最終找對了要操作的對象後,就可以給出指令,指令它做事情了,如需要它進行點選操作,那就給link對象來個click方法,到此,整個語句就可以完畢了。

分析:“句1”已經被拆解,作者在這裡用最通俗的語言方式連貫地叙述一遍“句1”,希望能讓新人聽明白。→在一個叫做“百度一下,你就知道”的浏覽器下的一個名曰“百度一下,你就知道”的網頁頁面上找到一個叫“圖檔”的連結,找到後,點選它。

在上面的例子中,是以browser().page().link()的結構出現的,但實際上,在web測試中并不隻有這一種固定形式,除了browser必定是在第一層以外,page以及link(或其他所有對象控件,如webedit等)都不是固定必須要接在前面那層的後面的,比如:

(2)browser().page().frame().link():link對象跟在frame對象後面而沒有跟在page後面。

(2)browser().dialog().page().webelement():page對象跟在dialog對象後面的一個例子。

接下來再看看“句2”,這句代碼中需要注意page已經變化了,變成了page ("百度圖檔—全球最大中文圖檔庫"),然後在該頁面中找到對象webedit("word"),最後給這個對象一個set的操作方法并在後面寫入參數,使得qtp在該頁面上找到關鍵字搜尋框,輸入“鳳姐”。

最後的“句3”唯一和前者的變化就是最終操作的對象不同了,browser不變,頁面仍然是page("百度圖檔—全球最大中文圖檔庫"),最後在前面輸入好參數的前提下對webbutton ("百度一下")這個控件進行一個點選的操作,使得百度圖檔搜尋引擎能夠搜尋到一些鳳姐的照片。

終極分析 以上可以看到browser對象一直使用的是同一個,随着page對象的改變而分成了2個分支,在不同的分支上定位到不同的最終目标并賦予“動作”。是以,現在應該知道關鍵字視圖中的代碼結構了。就是通過這樣的一層層定位,直到定位到最後的待操作對象,進而在expert view下完美地組成一句腳本代碼。

需要引出下一層對象用“.”,直到定位到最後一個待操作對象,然後仍然用“.”賦予其動作(各種不同的方法)。

在qtp中,要找到具體對象,如“圖檔”這個link,規則就是在對象大類(link類)後面以括号+引号的形式具體定位到那個link控件,比如link("圖檔")。需要注意的是,輸入括号和引号乃至其他任何符号都必須是在英文狀态下。切記!很容易出現類似的問題,在中文狀态的輸入法下打引号,結果qtp報錯,自己找了好長時間也找不出問題。

概括&小結:

對于qtp 來說,絕大部分的複雜操作都無法在關鍵字視圖中實作,例如,要處理動态對象、需要定制個性化測試結果、擷取對象運作時的屬性值(run-time value)等。

qtp的核心編碼語言是visual basic script,是以,如果讀者熟悉vbscript,就可以運用自如地通過程式設計方式在專家視圖中設計複雜的測試腳本。同樣,qtp本身的對象庫程式設計(object programming)和描述性程式設計(descriptive programming),這一切也都必須在專家視圖中才能完成。

關于對象庫程式設計、描述性程式設計、vbscript程式設計、run-time value、處理動态對象等一系列知識都會在後面的章節中逐漸向讀者呈現。

1.4.2 總結

不知道有些讀者會不會有這樣的疑問,本書既然一向有“徹底抛棄腳本錄制”的理念,那為什麼還要寫keyword view(關鍵字視圖)的内容呢,就算要寫隻一句話帶過不就得了!作者由衷地希望有這些疑問的讀者越多越好,這說明廣大讀者就是沖着“抛棄錄制”的思想購買這本書的。現在聽作者解釋一下吧。

作者這麼做就是因為想抛出一塊好磚引出更好的玉,在抛磚的時刻(籠統、重點配合一個執行個體介紹關鍵字視圖)如果能做,越有聲色,後面引出的玉一定就能更好(将關鍵字視圖中的步驟“畫面”,一條一條轉進專家視圖使其成為腳本代碼的一個解讀過程)。另外,請重新回顧下這個小章節标題的後半部分“思維轉換”。作者覺得更應該引導讀者轉換的是思想、思維,絕對不該是兩個視圖間的轉換那麼簡單與粗糙。讀者要從思想上去認識expert view,如果光從操作上直接轉向expert view(直接在關鍵字視圖敲擊代碼),表面上看很簡單很輕松,但其實忽略了對專家視圖的認識,也忽略了對qtp兩個視圖原理以及之間關系和不同點上的認識,如果這樣走下去,作者覺得在今後腳本開發的學習道路上挫折會越來越多,地基打好的關鍵性大家都很明白。相信,本書的這一個小章節内容雖少,但是對今後的幫助不一定少!

知識點鞏固和舉一反三練習

一、大家來找茬(結合圖1-48找出代碼片中的錯誤)

《精通QTP——自動化測試技術領航》—第1章1.4節認清并請遠離QTP的腳本錄制模式

代碼片如下:

browser("百度一下,你就知道").page("百度一下,你就知道").link("知 道").click

browser("百度百科—全球最大中文百科全書")._

page("百度百科—全球最大中文百科全書").webedit("word").click

browser(百度一下,你就知道)._

page("百度百科—全球最大中文百科全書").webbutton("進入詞條").set"51testing"

二、請根據圖1-49中關鍵字視圖的結構與步驟轉化成專家視圖中的代碼。

《精通QTP——自動化測試技術領航》—第1章1.4節認清并請遠離QTP的腳本錄制模式

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀