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