基于數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試的研究和實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:本文介紹了基于數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試以及其實(shí)現(xiàn)方法,包括軟件是否適合自動(dòng)化測(cè)試的可行性分析;開(kāi)發(fā)測(cè)試前的需求分析;基于數(shù)據(jù)驅(qū)動(dòng)的測(cè)試框架的實(shí)現(xiàn)以及其維護(hù)和擴(kuò)充。
關(guān)鍵詞:自動(dòng)化測(cè)試;手工測(cè)試;數(shù)據(jù)驅(qū)動(dòng);測(cè)試框架:回歸測(cè)試
0 引言
隨著社會(huì)的不斷發(fā)展和信息化的不斷普及,各種軟件越來(lái)越多,在日常生活中也起著越來(lái)越重要的作用,再加上客觀系統(tǒng)的復(fù)雜性,無(wú)論經(jīng)驗(yàn)多豐富的開(kāi)發(fā)人員、無(wú)論采用哪種開(kāi)發(fā)模型開(kāi)發(fā)出來(lái)的軟件,每個(gè)階段的技術(shù)復(fù)審也不可能毫不遺漏地查出和糾正所有的錯(cuò)誤,因此如何才能把新的軟件做得更穩(wěn)定、錯(cuò)誤更少呢?測(cè)試!統(tǒng)計(jì)表明,在典型的軟件開(kāi)發(fā)項(xiàng)目中,軟件測(cè)試工作量往往占軟件開(kāi)發(fā)總工作量的40%以上。
測(cè)試是軟件能否通向市場(chǎng)的最后也是最重要的一關(guān)。傳統(tǒng)的測(cè)試方法是手工測(cè)試,目前大部分都是采用此方法,其特點(diǎn)就是簡(jiǎn)單,但是它存在的問(wèn)題非常多。手工測(cè)試可能引入人為的輸入錯(cuò)誤,尤其在數(shù)據(jù)量大的情況下;另外大量重復(fù)性的手工測(cè)試可能成本較高,如果考慮軟件發(fā)生改動(dòng)而需要重復(fù)手工測(cè)試的情況,這個(gè)成本還會(huì)更高;沒(méi)有辦法對(duì)組件進(jìn)行隔離的測(cè)試,從而導(dǎo)致發(fā)現(xiàn)問(wèn)題和解決問(wèn)題的成本都太高。在很多項(xiàng)目中,測(cè)試人員的所有任務(wù)實(shí)際上都是手動(dòng)處理的,而實(shí)際上有很大一部分重復(fù)性強(qiáng)的測(cè)試工作是可以獨(dú)立出來(lái)自動(dòng)實(shí)現(xiàn)的。
針對(duì)手工測(cè)試的缺點(diǎn),自動(dòng)化測(cè)試應(yīng)運(yùn)而生。相比手工測(cè)試,自動(dòng)化測(cè)試的優(yōu)勢(shì)很多;規(guī)范測(cè)試流程,提高測(cè)試效率、測(cè)試覆蓋率等。很多人對(duì)自動(dòng)化測(cè)試存在誤區(qū),把其理解為找到一種自動(dòng)化測(cè)試工具,把它應(yīng)用到軟件工程項(xiàng)目中,自動(dòng)化測(cè)試工具只是被看作是一種錄制和回放的工具。事實(shí)上自動(dòng)化測(cè)試遠(yuǎn)不止這么簡(jiǎn)單,錄制和回放僅是自動(dòng)化測(cè)試中的最低級(jí)別。目前常把自動(dòng)化測(cè)試分為5個(gè)級(jí)別,如圖l所示。
現(xiàn)在常用的是基于數(shù)據(jù)驅(qū)動(dòng)的測(cè)試,它是以數(shù)據(jù)來(lái)控制自動(dòng)化測(cè)試的流程和動(dòng)作的測(cè)試,其中數(shù)據(jù)是獨(dú)立于測(cè)試用例腳本的,通常以文本文件形式、Excel文件形式、XML文件等形式存在。
1 基于數(shù)據(jù)驅(qū)動(dòng)自動(dòng)化測(cè)試的實(shí)施
1.1 可行性分析
基于對(duì)自動(dòng)化測(cè)試優(yōu)點(diǎn)的分析,很多人對(duì)自動(dòng)化測(cè)試存在另一個(gè)誤區(qū),認(rèn)為對(duì)于所有的軟件都適合引入自動(dòng)化測(cè)試,且只要引入自動(dòng)化測(cè)試,就會(huì)提高測(cè)試的效率,降低測(cè)試的成本。實(shí)際上并非如此,自動(dòng)化測(cè)試也需要開(kāi)發(fā)和搭建測(cè)試框架,創(chuàng)建測(cè)試用例,這也就意味著成本的投入。對(duì)于一個(gè)項(xiàng)目周期很緊的測(cè)試項(xiàng)目,按測(cè)試方案進(jìn)行手工測(cè)試的效率可能要比自動(dòng)化測(cè)試工具錄制腳本再測(cè)試的效率好得多。那么自動(dòng)化測(cè)試工具的價(jià)值在什么地方?
對(duì)于一個(gè)一次性開(kāi)發(fā)、沒(méi)有后續(xù)版本更新的軟件而言,自動(dòng)化測(cè)試是毫無(wú)意義的。但是現(xiàn)在很多軟件都會(huì)不斷推出新的版本,在推出新版本的過(guò)程中,每次除了測(cè)試新加或修改過(guò)的模塊,相關(guān)聯(lián)的舊模塊同樣需要測(cè)試,才能保證產(chǎn)品的質(zhì)量,這樣就需要做大量的重復(fù)工作,自動(dòng)化測(cè)試此時(shí)就可以創(chuàng)建測(cè)試中的可重用模塊,同時(shí)還可以覆蓋大部分的功能測(cè)試,這樣可以使測(cè)試人員從回歸測(cè)試中解脫出來(lái),專(zhuān)注于新模塊的測(cè)試。所以可以說(shuō)自動(dòng)化測(cè)試的最大價(jià)值在于回歸測(cè)試。
因此,對(duì)于一個(gè)軟件或其中某些模塊是否適合自動(dòng)化測(cè)試必須要先進(jìn)行可行性分析,以證明你所選的測(cè)試方法的正確性,通??蛇M(jìn)行自動(dòng)化測(cè)試的軟件需要滿足以下幾點(diǎn):
(1)手工測(cè)試復(fù)雜度高:
(2)所選測(cè)試用例,實(shí)現(xiàn)自動(dòng)測(cè)試的難度低;
(3)軟件用于自動(dòng)化測(cè)試的模塊界面變化相對(duì)不大;
(4)軟件生命周期長(zhǎng),經(jīng)常推出新的版本;
(5)軟件開(kāi)發(fā)已基本完成,主要用于測(cè)試升級(jí)版本;
(6)所選自動(dòng)化測(cè)試框架必須對(duì)所測(cè)軟件應(yīng)用界面有有效的支持,且維護(hù)管理成本較低。
另外自動(dòng)化測(cè)試前期需要投入時(shí)間和一定的成本投入,故不要一開(kāi)始就期望有高的回報(bào),其效應(yīng)會(huì)在不斷完善積累中顯現(xiàn)。而且不要期待自動(dòng)化測(cè)試可以發(fā)現(xiàn)每個(gè)版本中的大部分錯(cuò)誤,因?yàn)樽詣?dòng)化測(cè)試主要用于回歸測(cè)試,而且產(chǎn)品中每個(gè)新版本的大部分bug會(huì)在新模塊中出現(xiàn),所以自動(dòng)化測(cè)試在于長(zhǎng)期效應(yīng),能保證每個(gè)版本產(chǎn)品質(zhì)量的穩(wěn)定。
1.2 需求分析
正如開(kāi)發(fā)軟件需要有需求分析一樣,基于數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試本質(zhì)上也是開(kāi)發(fā),所以在制定測(cè)試方案之前也需要收集測(cè)試需求,這樣才能保證自動(dòng)化測(cè)試的成功。
隨著IT技術(shù)的發(fā)展,傳統(tǒng)的開(kāi)發(fā)人員兼任測(cè)試人員的模式已經(jīng)不能滿足需求,目前大多數(shù)較正規(guī)的軟件公司均已采用獨(dú)立的測(cè)試人員來(lái)對(duì)軟件進(jìn)行測(cè)試,所以形成了開(kāi)發(fā)人員、開(kāi)發(fā)管理者、測(cè)試人員、測(cè)試管理者的模式。如圖2示。
規(guī)范的測(cè)試過(guò)程需要上述人員的通力配合,因此在做自動(dòng)化測(cè)試之前應(yīng)該有一份規(guī)范的文檔,用來(lái)描述測(cè)試內(nèi)容、人員安排、測(cè)試流程、缺陷管理等。其中開(kāi)發(fā)管理人員和測(cè)試管理人員分別作為開(kāi)發(fā)團(tuán)隊(duì)和測(cè)試團(tuán)隊(duì)的接口,協(xié)調(diào)兩個(gè)團(tuán)隊(duì)的工作,一般來(lái)說(shuō)開(kāi)發(fā)人員需要在每次對(duì)軟件更新后提供詳細(xì)的功能文檔,開(kāi)發(fā)人員還需要提供自動(dòng)化測(cè)試所需要的數(shù)據(jù)等相關(guān)資源,測(cè)試人員根據(jù)功能文檔創(chuàng)建適合做自動(dòng)化的測(cè)試用例,并建立基于數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試工程。
1.3 數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試框架結(jié)構(gòu)以及實(shí)現(xiàn)
基于數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試不是簡(jiǎn)單的錄制回放,而且通過(guò)編程的形式來(lái)實(shí)現(xiàn)每個(gè)測(cè)試用例,其中數(shù)據(jù)文件獨(dú)立于測(cè)試用例,這樣數(shù)據(jù)的更新對(duì)整個(gè)測(cè)試工程的維護(hù)會(huì)降低到最小。因此創(chuàng)建自動(dòng)化測(cè)試框架需要有一定的編程基礎(chǔ)。
本文自動(dòng)化測(cè)試中采取的是三層框架結(jié)構(gòu),如圖3所示。
其中最底層為UI Driver層,主要負(fù)責(zé)定義基本的通用元素庫(kù),如按鈕、下拉框、文本框等在每個(gè)軟件中都會(huì)出現(xiàn)的基本元素;對(duì)這些元素的基本操作以及通用操作(如等待某段時(shí)間的函數(shù)等)。這一層和測(cè)試的軟件沒(méi)有關(guān)系,因此通用性很強(qiáng),既可以自己開(kāi)發(fā)也可以用前人開(kāi)發(fā)好的底層自動(dòng)化Driver。
第二層為代理(Agent)層,這一層是建立在被測(cè)軟件上,對(duì)被測(cè)軟件的每一界面(UI)均建立相關(guān)的類(lèi)和對(duì)象,方便最上層調(diào)用,這一層需根據(jù)軟件的不斷更新而更改。
最上層為測(cè)試用例層(Test Cases),這一層建立在代理層上,代理層建立好之后,可以提供給測(cè)試用例層所需的界面元素,使測(cè)試用例可以通過(guò)對(duì)界面元素的操作完成自動(dòng)化測(cè)試過(guò)程。這一層是測(cè)試用例的實(shí)現(xiàn)層,如果有了比較完善、結(jié)構(gòu)合理的底層以及代理層,此層實(shí)現(xiàn)起來(lái)就會(huì)非常簡(jiǎn)單。
其中測(cè)試數(shù)據(jù)以及軟件中元素的ID信息是存放在獨(dú)立的XML文件中,測(cè)試用例層或者代理層需要用數(shù)據(jù)時(shí),可以通過(guò)統(tǒng)一的接口讀取。這樣的方式不僅可以使整個(gè)測(cè)試工程結(jié)果清晰,最重要的是可以降低整個(gè)測(cè)試系統(tǒng)的維護(hù)費(fèi)用,這樣才能確保自動(dòng)化測(cè)試的投入回報(bào)不斷提升。
1.4 自動(dòng)化測(cè)試的維護(hù)和擴(kuò)充
自動(dòng)化測(cè)試工程會(huì)由于軟件的不斷擴(kuò)充而必須加以維護(hù)和擴(kuò)充。其中維護(hù)是指由于新版本的升級(jí)導(dǎo)致的舊的測(cè)試用例無(wú)法通過(guò),必須加以維護(hù)才能正常運(yùn)行。而擴(kuò)充則是指由于版本的不斷升級(jí),某些功能已經(jīng)非常穩(wěn)定,適合于自動(dòng)化測(cè)試,需要新添加一些測(cè)試用例來(lái)覆蓋這些功能。
擴(kuò)充和維護(hù)是一個(gè)長(zhǎng)期的過(guò)程,其中需特別注意的是每次自動(dòng)運(yùn)行測(cè)試用例,必須有個(gè)詳細(xì)的結(jié)果日志來(lái)記錄測(cè)試用例的通過(guò)情況,對(duì)于運(yùn)行失敗的用例,記錄失敗的原因,這樣有利于測(cè)試人員通過(guò)結(jié)果來(lái)判斷產(chǎn)品的bug。這里需要特別注意的是,有的測(cè)試用例表面上是通過(guò)了,但是實(shí)際上卻執(zhí)行失敗了,并且結(jié)果日志上記錄的是通過(guò),如果出現(xiàn)這樣的情況,而測(cè)試人員卻毫無(wú)察覺(jué),這就是失敗的自動(dòng)化,所以對(duì)于每次自動(dòng)化測(cè)試的結(jié)果,最好能夠建立起核查機(jī)制,以確保結(jié)果的可靠性。
2 總結(jié)
自動(dòng)化測(cè)試是一個(gè)比較新的研究領(lǐng)域,也是近來(lái)很具爭(zhēng)議性的研究話題,對(duì)于自動(dòng)化測(cè)試引入之后的利弊,眾說(shuō)紛紜。當(dāng)然自動(dòng)化測(cè)試也在爭(zhēng)議中顯現(xiàn)出了強(qiáng)大的生命力,其測(cè)試效率高、重用性好等優(yōu)點(diǎn)得到了廣泛的認(rèn)同。本文中所介紹的自動(dòng)化測(cè)試框架結(jié)構(gòu)在很多大型的軟件系統(tǒng)中得到了應(yīng)用,取得了良好的效果。