周晨良
如今軟件測試行業迅猛崛起,不僅是手工測試,而且對于自動化測試的需求與日俱增,企業級的軟件對于其質量要求控制非常嚴格,并且會根據業務情況頻繁更新。因此,自動化回歸測試越來越多的被應用到企業級的軟件測試流程中去,隨之而來的自動化測試工具也不斷推陳出新,自動化測試框架理論日趨成熟,從數據驅動(Data Driven Testing),關鍵字驅動(Keyword driven Testing),到最新的Hybrid Framework混合型的測試框架,這些有助于提高自動化測試效率的理論正越來越受到測試人員的推崇。
在自動化測試的過程中,重中之重是對象的識別,因此對于混合型模式的對象識別技術的研究,越來越受到人們的關注。本文將以自動化腳本創建銷售報表流程為例,研究如何將對象倉庫技術與描述性對象識別技術象結合,建立合理高效的對象識別方法,從而優化混合型模式的自動化測試。
在面向對象的編程中,類和對象是最基本的單位,而所有的操作都是圍繞著他們展開的,在自動化測試腳本的設計中,同樣也有所謂的對象,它們就是待測軟件在可視化界面上所展現出來的控件,最簡單的例如Text Box,Radio Button,Data Grid等,如果被待測系統使用到了諸如Siebel,SAP系統中的一些較高級的控件,那么通過一些插件,這些對象也能被自動化測試工具所辨別。MERCK銷售報表系統使用了基于sap的PeopleSoft,因此在對象識別上存在一定的難度,而只有對象能夠被識別,那之后的基于對象的各種測試方法、操作才能得以實現,因此,在自動化測試中,對象的識別及抓取,是測試順利進行的不可或缺的前提條件。
但是隨著各種開發技術的不斷推陳出新,一些不常用的控件對象,不能被自動化代碼識別,即使是一些常用的語言及控件,由于版本更新等原因,如果自動化軟件沒有及時更新,也會導致辨識不了對象的情況,自動化測試中的關鍵之一,就是對對象識別的研究及設計。
(1)對象倉庫
在此次MERCK銷售報表系統中,大量的使用了對象倉庫的對象識別技術,對象倉庫,是一種較新的對象存儲技術,大多數的自動化軟件,能夠對對象倉庫提供可視化支持,比如win runner及quick test professional等,是一種比較高級的對象存儲體系,他們通過在應用程序中選擇對象,然后將控件的的屬性及屬性值更新保存到倉庫中,對象按其層次分別存貯在對應的層級之上,這樣系統就“認識”了這個控件。
測試程序執行時,會自動查詢對象倉庫中的對象數據,并自動定位到目標以執行操作,相對比較方便簡單,由于CBAT的宗旨之一就是提高可維護性,因此我們著重研究的,是當控件的屬性由于需求變更而變化時,對象倉庫如何進行對應的修改,以及測試執行時如何調用。
當對象被一一安置到對象倉庫中后,對于對象的識別就比較簡單了,由于自動化代碼的調用方式是:對象.操作(數據),例如:
Browser("Oracle BI Answers").Page("Oracle BI Answers").Frame("ViewUI 0").Link("OK").Click
以上代碼完成的操作,就是對某個頁面中的“OK" 按鈕執行點擊操作.
(2)描述性對象
有別于對象倉庫,描述性對象沒有事先對對象進行存儲,而是通過描述性代碼,結合對象屬性值加以動態識別,原因之一即對象不能被識別,對象不能識別的原因有以下一些:
● 測試運行到某一步時,窗口上有相同類型且名稱相同的控件
● 被測軟件使用了第三方控件,自動化測試軟件不能識別
● 對象是動態的
原因之二是由于大多數自動化測試需要的,一些對象會根據測試用例的不同目的作出調整,同一個對象在不通用例中的屬性會變化,導致識別困難。鑒于以上一些技術難點,所以我們引入描述性對象的方法,它的工作原理也是:對象操作(數據),不同之處在于其中“對象”又細分為:對象屬性.屬性值,例如:
Innerhtml(button1).click.
該代碼執行搜索,當測試運行到此步時,系統搜索當前頁面上對象屬性為innerhtml且屬性值為button1的控件,并加以定位并執行操作,系統對象情況更復雜時,可以使用多屬性定位:
(Innerhtml(button1),index(8).click.
在本次的描述性對象方法腳本中,我們使用了如下的代碼結構:
Function Attribute(P_Attribute,V_Attribute)
Attribute=P_Attribute
Attribute_value=V_Attribute
vAttribute(P_Attribute).Value=V_Attribute
Set Attribute=vAttribute
End Function
在設計測試用例時,就可以通過外部數據表來傳遞對象的屬性及操作。
以上兩種技術在外部數據表的支持下,可以相結合使用,在一般情況下,腳本可以按照對象屬性來識別大多數對象,而對于多變及復雜對象,可以通過將控件的屬性及屬性值保存在外部數據表中,調用描述性對象函數來進行編譯并返回對象,如圖1所示,測試人員不用去對象庫中修改對象的屬性,只需修改對象數據表即可。
圖1 混合型對象識別工作流程
將這兩種識別方式加以混合利用以達到最佳的擴展性及維護性,以解決以下一些基本的問題:
· 控件部分屬性同名,同值
· 非主流控件不能識別
· 動態控件
· 測試關鍵字的維護性提高
· 低耦合
圖2 銷售報表生成流程
自動化腳本在運行自動生成報表的過程中,每一個步驟都需要對應的操作對象,如 表1中所示,有些對象是直接調用對象倉庫的,而有些則是需要描述性程序來翻譯的。
表1 銷售報表生成流程中的控件操作
外部數據表可以是任意形式的數據源,如SQL server,oracle,xml及excel等,測試人員按一定格式,填入測試數據即相當于編寫測試用例,具體的格式參照表2所示。
表2 銷售報表生成流程中的外部數據
Function SubCategory(P_SubCategory,V_SubCategory)
Dim vSubCategory
Set SubCategory=nothing
Set vSubCategory=Description.Create()
If Instr(P_SubCategory,",")>0 Then
P_SubCategory_Array=Split(P_SubCategory,",",-1,1)
V_SubCategory_Array=Split(V_SubCategory,",",-1,1)
vSubCategory(P_SubCategory_Array(0)).Value=V_SubC ategory_Array(0)
vSubCategory(P_SubCategory_Array(1)).Value=V_SubC ategory_Array(1)
Set SubCategory=vSubCategory
Else
vSubCategory(P_SubCategory).Value=V_SubCategory
Set SubCategory=vSubCategory
End If
End Function
本文以美國Merck公司的銷售報表自動化測試設計為例,研究了如何用對象倉庫及描述性對象相結合的方式在來識別對象。這種混合型模式既延續了對象倉庫的便捷又整合了描述性對象的強大擴展性,在項目初期版本測試及發布時,許多未能識別的對象問題得到了解決,使得自動化測試框架成功應用,之后的二期三期的后續開發中,前期的對象倉庫可以被復用,而描述性對象又為新的對象提供了預留擴展接口,使得系統需求的變更,對自動化測試代碼造成的影響降到最低,測試人員對于代碼的維護及測試用例開,發執行等步驟大大簡化,提供了強有力的支持。
[1]楊根興等.軟件質量保證.測試與評價,[M]北京:清華大學出版社,2007.
[2]Kanglin Li,Mengqi Wu高效軟件測試自動化,[M]北京:電子工業出版社,2004.
[3]Kanglin Li,Mengqi Wu圖形用戶界面測試自動化,[M]北京:電子工業出版社,2005.
[4]陳能技,QTP自動化測試實踐,[M]北京:電子工業出版社,2008.
[5]貝克,測試驅動開發(注釋版),[M]北京:人民郵電出版社.