QTP主要采用的是使用GUI模擬人的操作。它在模擬人的操作時會記錄操作的對象及所做的操作和順序,然后在回放時按記錄順序操作這些對象。而在這個模擬的過程中,最重要的莫過于界面對象(控件)的識別,那QTP是怎么做的呢?下面就舉一個小例子來說明:
比如我們要測試內網論壇http://XXX.XXX.XXX/bbs/index.php用正確的用戶名和密碼是否能成功登錄。登錄界面如下:
測試步驟大概如下:
1. 要先識別用戶名輸入框、密碼輸入框、登錄按鈕控件
2. 在用戶名輸入框中輸入正確的用戶名
3. 在密碼輸入框中輸入正確的密碼
4. 點擊登錄按鈕
5. 驗證是否登錄成功,要驗證是否成功登錄,那就得知道成功登錄與失敗登錄的區別。成功登錄后的頁面如下:
我們可以通過驗證紅色框中的內容或驗證綠色框中的內容來標識登錄是否成功,然后記入測試報告。
以上只是一個小例子,從中可以看出識別對象是一個很重要的問題也是一個很困難的問題,畢竟現在的控件類型越來越多(包括第三方插件或自己開發或定義的控件)。那QTP是怎么來識別對象的呢,下面通過講解QTP識別以上小例子中的控件的方法來說明一下:
首先,QTP是通過記錄控件的屬性來標識對象的(當然具體用哪一些屬性,QTP是有默認的,也可以配置)。假設QTP使用“html tag”和“name”屬性來識別對象,QTP是怎么處理的呢?請先看下圖:
圖-QTP對象識別
在使用QTP錄制時,QTP會把對象存儲到對象庫中。而對象是按如上圖的方式存儲于對象庫中。即,QTP會默認給錄制的對象取一個名字(這個名字可以自己改,只要在腳本中使用到此對象時保持和此名字一樣就可以了),然后把識別此對象的屬性和屬性值存儲到對象庫中,我們可以先把識別對象的屬性集合認為是一個屬性包,接著就是把識別此對象的屬性包與定義的對象名進行關聯,也叫做對象映射。這樣一個對象就存入對象庫了。
接著來說明QTP是如何調用這個對象的。例如,在“用戶名輸入框”中輸入“a用戶”,偽代碼如下:
WebEdit(“用戶名輸入框”).Set “a用戶”
現在分析一下這個語句:
首先,QTP會通過“用戶名輸入框”這個名字到對象庫的對象名中查找,會找到以下這個對象名:
然后通過找到的對象名,找到對象名映射的屬性包,如下圖:
接著QTP就會通過這個屬性包來匹配頁面上的控件的屬性,如果在頁面上找到一個唯一與此屬性包匹配的控件,那QTP就會認為此控件為要找的控件。
然后QTP根據“WebEdit”來確定控件的類型,并調用QTP對于此類控件內置的操作方法“Set”把“a用戶”賦予了控件
至于其他控件的識別和操作,基本原理和上面一樣。檢驗登錄是否成功,也是通過比對登錄成功后的頁面特有的控件的屬性值來判斷。
QTP還提供描述性編程,從而可以不使用對象庫,如在“用戶名輸入框”中輸入“a用戶”,可以使用以下偽代碼:
WebEdit(“Html tag:=INPUT”,” Name=username”).Set “a用戶”
細心的朋友可能已經發現,上面只是把識別對象的屬性包中的屬性和屬性值按一定規則直接寫到了“WebEdit()”的括號內了。這時QTP將不通過對象庫,而是直接使用括號內的屬性和屬性值到頁面上去找匹配項。然后操作與使用對象庫的操作一樣。
當然,QTP還提供了一些其他的功能,比如參數化,劃分模塊(Action)等。但最重要的還是對象的識別。
原文轉自:http://www.anti-gravitydesign.com