付曉+楊海根
[摘要]隨著軟件技術(shù)的發(fā)展,需要消耗大量的人力才能進(jìn)行的大量重復(fù)測試帶來的低效率,使進(jìn)行自動(dòng)化測試成為軟件測試的必然趨勢。理想的自動(dòng)化測試能夠按計(jì)劃完全自動(dòng)地運(yùn)行,在開發(fā)人員和測試人員不可能實(shí)行三班倒的情況下,自動(dòng)化測試可以勝任這個(gè)任務(wù),充分地利用了公司的資源,也避免了開發(fā)和測試之間的等待。對于功能已經(jīng)完整和成熟的軟件,每發(fā)布一個(gè)新的版本,其中大部分功能和界面都和上一個(gè)版本相似或完全相同,這部分功能特別適合于自動(dòng)化測試,從而可以讓測試達(dá)到測試每個(gè)特征的目的。
[關(guān)鍵詞]自動(dòng)化測試;實(shí)現(xiàn);需求
[DOI]10.13939/j.cnki.zgsc.2016.34.096
軟件測試一個(gè)特點(diǎn)是重復(fù)性,重復(fù)測試讓我們產(chǎn)生厭倦心理,因此人們想到用工具來解決重復(fù)的問題。另外手工還存在精確性的問題,尤其是面對大量數(shù)據(jù)需要檢查時(shí)候,人工的比較和搜索存在效率問題,易出錯(cuò),覆蓋面低。手工測試存在效率問題,這在軟件產(chǎn)品的研發(fā)后期階段尤其明顯,隨著功能日趨增多,需要檢查的點(diǎn)和測試內(nèi)容也越來越多,人工回歸測試難度增大,很難在短時(shí)間完成大面積測試覆蓋。當(dāng)然,手工測試也有不可替代的地方,比如測試用例的設(shè)計(jì),界面和用戶體驗(yàn)性測試,正確性的檢查,而自動(dòng)化通過計(jì)算能力,不知疲倦地運(yùn)行,對于數(shù)據(jù)能精確運(yùn)行。因此,在需要重復(fù)執(zhí)行界面操作、計(jì)算、數(shù)值比較、搜索等方面。我們需要充分利用自動(dòng)化測試工具的高效率來幫助測試人員完成測試用例的執(zhí)行,加快回歸速度,提高測試覆蓋率。
1 自動(dòng)化測試準(zhǔn)備
在進(jìn)行項(xiàng)目自動(dòng)化測試之前,首先要考慮以下5個(gè)方面,其次是衡量項(xiàng)目開展自動(dòng)化的一些條件。
(1)測試自動(dòng)化類似于軟件開發(fā)過程
錄制/回放腳本開發(fā)方式是不可能應(yīng)付所有自動(dòng)化測試需求的,因此需要測試人員掌握必要的開發(fā)知識和代碼。
(2)測試自動(dòng)化是一個(gè)長期的過程
自動(dòng)化測試只有長期多次運(yùn)行才能體現(xiàn)出價(jià)值,同時(shí)需要考慮自動(dòng)化測試維護(hù)成本。
(3)確保自動(dòng)化測試的資源,包括人員和技能
最好有專門的自動(dòng)化測試工程師來保證測試自動(dòng)化持續(xù),需要對項(xiàng)目負(fù)責(zé),設(shè)計(jì)測試框架和腳本結(jié)構(gòu),解決各種測試腳本開發(fā)問題。
(4)循序漸進(jìn)開展自動(dòng)化測試
(5)確保測試過程的成熟度
2 自動(dòng)化測試開展
自動(dòng)化測試只有在多次運(yùn)行后,才能體現(xiàn)出自動(dòng)化的優(yōu)勢,只有不斷地運(yùn)行自動(dòng)測試,才能有效預(yù)防缺陷,減輕測試人員手工的回歸測試工作量,如果一個(gè)項(xiàng)目是短期的,則不適合開展,另外,不宜在一個(gè)進(jìn)度非常緊迫的項(xiàng)目中開展自動(dòng)化測試。
自動(dòng)化測試不應(yīng)該在界面尚未穩(wěn)定的時(shí)候開始,但是此時(shí)可以著手準(zhǔn)備自動(dòng)化測試計(jì)劃和準(zhǔn)備工作,自動(dòng)化測試工具評估使用。
首先分析項(xiàng)目的特點(diǎn),軟件系統(tǒng)采用的開發(fā)工具、語言、技術(shù)平臺等,結(jié)合測試的類型,測試的要求,同時(shí)還要了解目前存在的各種測試工具的情況,根據(jù)選擇的測試工具,進(jìn)行試用,制訂一份詳細(xì)的測試工具使用計(jì)劃。
3 自動(dòng)化測試工具
軟件測試可以按照自動(dòng)化工具類型進(jìn)行分類,軟件自動(dòng)化測試工具是實(shí)現(xiàn)軟件自動(dòng)化測試必不可少的關(guān)鍵,因此,選擇一個(gè)優(yōu)秀的、適合自己的測試項(xiàng)目的測試工具是實(shí)現(xiàn)成功自動(dòng)化測試的第一步。
3.1 按用途分類
軟件自動(dòng)化測試工具按安裝用途可分為
測試管理工具
自動(dòng)化功能測試工具
性能測試工具
單元測試工具
白盒測試工具
測試用例設(shè)計(jì)工具
自動(dòng)化測試工具可基于GUI層面進(jìn)行測試,也可基于代碼層面進(jìn)行測試,只要實(shí)現(xiàn)了自動(dòng)化執(zhí)行測試用例,自動(dòng)檢測測試數(shù)據(jù)的測試工具,替代人工進(jìn)行測試步驟的執(zhí)行,從而驗(yàn)證應(yīng)用程序是否滿足了特定功能的測試工具。
3.2 基于代碼層面的功能自動(dòng)化測試工具
基于代碼層面的功能自動(dòng)化測試工具主要是一些單元測試工具,例如junit,這些工具直接訪問被測試的應(yīng)用程序的代碼,對其中的類和函數(shù)進(jìn)行調(diào)用,輸入各種測試數(shù)據(jù),檢查函數(shù)的返回值,通過比較返回值與期待值是否一致來判斷測試是否通過。
3.3 基于瀏覽器和DOM 對象模型的功能自動(dòng)化測試工具
例如selenium,這些測試工具直接訪問Web瀏覽器,利用腳本語言操作瀏覽器和Web頁面中包含的DOM對象,從而達(dá)到模擬用戶控制瀏覽導(dǎo)航、頁面元素的操作等效果,并直接獲取DOM對象的屬性,從而獲得Web頁面元素的各種屬性,通過這些屬性判斷測試步驟結(jié)果是否正確。
3.4 基于GUI對象識別的測試工具
目前,大部分自動(dòng)化功能測試工具,尤其是商業(yè)的測試工具,如QTP都是基于GUI對象識別技術(shù)來設(shè)計(jì)的,基于GUI層面的測試需要與各種節(jié)目元素打交道,而且不同的編程語言和開發(fā)工具在界面的表現(xiàn)、事件的響應(yīng)上都略有不同。
QTP同樣是通過查找應(yīng)用程序界面中的各個(gè)控件的屬性來判斷是否與測試對象匹配,還可以根據(jù)控件的類型,把其擁有的可操作方法列舉出來,針對不同平臺和語言編寫的控件,依據(jù)該控件與其他控件能區(qū)分的屬性來判斷其身份,例如控件的類名、控件的文本等。
QTP自動(dòng)化測試工具是一種自動(dòng)測試工具。使用QTP的目的是想用它來執(zhí)行重復(fù)的手動(dòng)測試,主要是用于回歸測試和測試同一軟件的新版本。因此在測試前要考慮好如何對應(yīng)用程序進(jìn)行測試,例如要測試哪些功能、操作步驟、輸入數(shù)據(jù)和期望的輸出數(shù)據(jù)等。QuickTest針對的是GUI應(yīng)用程序,包括傳統(tǒng)的Windows應(yīng)用程序,以及現(xiàn)在越來越流行的Web應(yīng)用。它可以覆蓋絕大多數(shù)的軟件開發(fā)技術(shù),簡單高效,并具備測試用例可重用的特點(diǎn)。其中包括:創(chuàng)建測試、插入檢查點(diǎn)、檢驗(yàn)數(shù)據(jù)、增強(qiáng)測試、運(yùn)行測試、分析結(jié)果和維護(hù)測試等方面。
4 自動(dòng)化測試基本流程
基本流程圖如下。
4.1 制訂測試計(jì)劃
在展開自動(dòng)化測試之前,我們需要做個(gè)測試計(jì)劃,明確測試對象、測試目的、測試的項(xiàng)目內(nèi)容、測試的方法、測試的進(jìn)度要求,并確保測試所需的人力、硬件、數(shù)據(jù)等資源都準(zhǔn)備充分。
4.2 分析測試需求
用例設(shè)計(jì)者根據(jù)測試計(jì)劃和需求說明書,分析測試需求,設(shè)計(jì)測試需求樹,以便用例設(shè)計(jì)時(shí)能夠覆蓋所有的需求點(diǎn)。一般來講,基于Web功能測試需要覆蓋以下幾個(gè)方面:
(1)頁面鏈接測試,確保各個(gè)鏈接正常;
(2)頁面控件測試,確保各個(gè)控件可靠;
(3)頁面功能測試,確保各項(xiàng)操作正常;
(4)數(shù)據(jù)處理測試,確保數(shù)據(jù)顯示準(zhǔn)確、處理精確可靠;
(5)模塊業(yè)務(wù)邏輯測試,確保各個(gè)業(yè)務(wù)流程暢通。
4.3 設(shè)計(jì)測試用例
通過分析測試需求,設(shè)計(jì)出能夠覆蓋所有需求點(diǎn)的測試用例,形成專門的測試用例文檔。由于不是所有的測試用例都能用自動(dòng)化來執(zhí)行,所以需要將能夠執(zhí)行自動(dòng)化測試的用例匯總成自動(dòng)化測試用例。必要時(shí),要將登錄系統(tǒng)的用戶、密碼、產(chǎn)品、客戶等參數(shù)信息獨(dú)立出來形成測試數(shù)據(jù),便于腳本開發(fā)。
4.4 搭建測試環(huán)境
自動(dòng)化測試人員在用例設(shè)計(jì)工作開展的同時(shí)即可著手搭建測試環(huán)境。因?yàn)樽詣?dòng)化測試的腳本編寫需要錄制頁面控件,添加對象。測試環(huán)境的搭建,包括被測系統(tǒng)的部署、測試硬件的調(diào)用、測試工具的安裝盒設(shè)置、網(wǎng)絡(luò)環(huán)境的布置等。
4.5 編寫測試腳本
根據(jù)自動(dòng)化測試用例和問題的難易程度,采取適當(dāng)?shù)哪_本開發(fā)方法編寫測試腳本。一般先通過錄制的方式獲取測試所需要的頁面控件,然后再用結(jié)構(gòu)化語句控制腳本的執(zhí)行,插入檢查點(diǎn)和異常判定反饋語句,將公共普遍的功能獨(dú)立成共享腳本,必要時(shí)對數(shù)據(jù)進(jìn)行參數(shù)化。當(dāng)然還可以用其他高級功能編輯腳本。腳本編寫好了之后,需要反復(fù)執(zhí)行,不斷調(diào)試,直到運(yùn)行正常為止。腳本的編寫和命名要符合管理規(guī)范,以便統(tǒng)一管理和維護(hù)。
4.6 分析測試結(jié)果、記錄測試問題
應(yīng)該及時(shí)分析自動(dòng)化測試結(jié)果,建議測試人員每天抽出一定時(shí)間,對自動(dòng)化測試結(jié)果進(jìn)行分析,以便盡早地發(fā)現(xiàn)缺陷。如果采用開源自動(dòng)化測試工具,建議對其進(jìn)行二次開發(fā),以便與測試部門選定的缺陷管理工具緊密結(jié)合。理想情況下,自動(dòng)化測試案例運(yùn)行失敗后,自動(dòng)化測試平臺就會(huì)自動(dòng)上報(bào)一個(gè)缺陷。測試人員只需每天抽出一點(diǎn)時(shí)間,確認(rèn)這些自動(dòng)上報(bào)的缺陷,是否是真實(shí)的系統(tǒng)缺陷。如果是系統(tǒng)缺陷就提交開發(fā)人員修復(fù),如果不是系統(tǒng)缺陷,就檢查自動(dòng)化測試腳本或者測試環(huán)境。
4.7 跟蹤測試BUG
測試記錄的BUG要記錄到缺陷管理工具中去,以便定期跟蹤處理。開發(fā)人員修復(fù)后,需要對此問題執(zhí)行回歸測試,就是重復(fù)執(zhí)行一次該問題對應(yīng)的腳本,執(zhí)行通過則關(guān)閉,否則繼續(xù)修改。如果問題的修改方案與客戶達(dá)成一致,但與原來的需求有所偏離,那么在回歸測試前,還需要對腳本進(jìn)行必要的修改和調(diào)試。
5 自動(dòng)化測試架構(gòu)
真正的自動(dòng)化測試框架可以不是一個(gè)程序,它僅僅是一種思想和方法的集合,說白了,就是一個(gè)架構(gòu),它定義了幾層架構(gòu),定義了各層互相通信的方式。通過這個(gè)架構(gòu)我們才能在上面進(jìn)行拓展我們的測試對象(核心體)、測試庫(鏈接庫)、測試用例集(各個(gè)windows進(jìn)程)、測試用例(線程),而其之間通過參數(shù)的傳遞進(jìn)行通信(即相當(dāng)于系統(tǒng)中的消息傳遞)。
5.1 幾種自動(dòng)化測試框架思想
(1)模塊化思想
就是將一個(gè)測試用例中的幾個(gè)不同的測試點(diǎn)拆分并且將其單個(gè)點(diǎn)的測試步驟進(jìn)行了封裝,形成了一個(gè)模塊。
例如:一個(gè)測試用例要對一個(gè)登錄程序進(jìn)行測試,其中包括:用戶名輸入、密碼輸入以及確定登錄。
那么就可以將用戶名輸入、密碼輸入、確定登錄、取消登錄四個(gè)操作分別封裝在四個(gè)不同的模塊中。測試時(shí),只需調(diào)用其模塊即可。這樣的話,當(dāng)一個(gè)模塊有變化,你只需單獨(dú)維護(hù)那個(gè)模塊即可,也可以根據(jù)模塊的不同組合成不同的測試用例。
(2)庫思想
就是模塊化思想的升華,其為應(yīng)用程序的測試創(chuàng)造了庫文件(可以是APIs、DLLs等),這些庫文件為一系列函數(shù)的集合。其與模塊化思想不同的是,其拓展了接口思想,即可以通過接口去傳遞參數(shù),而不是一個(gè)封死的模塊,可以說是一個(gè)多了一個(gè)“門”的交互型模塊。
例如:登錄場景,只是將用戶名輸入、密碼輸入、確定登錄、取消登錄封裝成一個(gè)庫,這個(gè)庫含有一個(gè)函數(shù)Login,這個(gè)函數(shù)Login接收兩個(gè)參數(shù)“用戶名、密碼”,對輸入不同的用戶名和密碼可以進(jìn)行不同的測試用例。也可以用另外一個(gè)函數(shù)Cancle。
(3)數(shù)據(jù)驅(qū)動(dòng)思想
就是變量不變的數(shù)據(jù)驅(qū)動(dòng)結(jié)果,不同的數(shù)據(jù)導(dǎo)致了不同的結(jié)果的產(chǎn)生。而對于數(shù)據(jù)的導(dǎo)入,可以通過很多方式,例如:Excle表、XML(用在Web中)、數(shù)據(jù)庫(DB)、CSV文件、TXT等都可以。
(4)關(guān)鍵字驅(qū)動(dòng)思想
關(guān)鍵字驅(qū)動(dòng)就是一種面向?qū)ο蟮乃枷耄纾篞TP、RFT中,對象可以為一個(gè)數(shù)據(jù)或者一個(gè)關(guān)鍵字,對對象的抓取,可以將其測試對象封裝為一個(gè)關(guān)鍵字,這樣可以對其關(guān)鍵對象進(jìn)行各種操作了,不同的對象可以驅(qū)動(dòng)不同的測試流向與結(jié)果。
5.2 自動(dòng)化測試發(fā)展
(1)第一代自動(dòng)化測試,即自動(dòng)化測試思想剛開始誕生時(shí),依靠的是傳統(tǒng)的“錄制—回放”技術(shù),這種技術(shù)與現(xiàn)在的工具的“錄制—回放”思想不一樣,其實(shí)就是一個(gè)“模擬”的過程,即模擬對PC的操作而形成的,其基于你對鍵盤的輸入與對鼠標(biāo)的操作,原理與按鍵精靈等類似,這種機(jī)制對環(huán)境的依賴性太強(qiáng),對變化性太過敏感,因此不可能發(fā)展成一種規(guī)模。
(2)第二代自動(dòng)化測試,即腳本化的自動(dòng)化測試,利用腳本進(jìn)行結(jié)構(gòu)化的自動(dòng)化測試,此可以應(yīng)用于CLI與API的自動(dòng)化測試,在此就開始集成了模塊化與庫思想。
(3)第三代自動(dòng)化測試,開始產(chǎn)生了各種自動(dòng)化測試思想,包括數(shù)據(jù)驅(qū)動(dòng)與關(guān)鍵字驅(qū)動(dòng)思想,其伴隨著對象化思想的產(chǎn)生,也造就了現(xiàn)在一系列的自動(dòng)化測試軟件,其中都集成了這些思想,從這時(shí)候開始,自動(dòng)化就開始實(shí)現(xiàn)了一定的規(guī)模,開始運(yùn)用在各個(gè)行業(yè),并且發(fā)展趨勢越來越快。
5.3 構(gòu)建自動(dòng)化測試框架的策略
做一個(gè)自動(dòng)化測試框架主要是從分層上去考慮,而不是簡簡單單地應(yīng)用一種思想,它是各種思想的集合體。而其中,可以貫穿著自動(dòng)化測試的各種思想,例如:對象層中有關(guān)鍵字的思想、可以將對象庫標(biāo)示在Excel表中進(jìn)行管理,或者應(yīng)用動(dòng)態(tài)搜索的方式傳遞對象識別參數(shù)。tasks層中可以封裝各種方法,形成一個(gè)大型的方法庫,而每個(gè)方法中可以應(yīng)用數(shù)據(jù)驅(qū)動(dòng)的思想。
6 結(jié) 論
自動(dòng)化測試的優(yōu)點(diǎn)是能夠很快、很廣泛地查找缺陷,同時(shí)可以做很多重復(fù)性的工作,自動(dòng)化功能測試工具無須大量的軟件測試人員手動(dòng)地再次執(zhí)行測試用例,極大地提高了工作效率??梢詧?zhí)行一些手工測試?yán)щy或不可能進(jìn)行的測試。比如,對于大量用戶的測試,不可能同時(shí)讓足夠多的測試人員同時(shí)進(jìn)行測試,但是卻可以通過自動(dòng)化測試模擬同時(shí)有許多用戶,從而達(dá)到測試的目的。更好地利用資源。將煩瑣的任務(wù)自動(dòng)化,可以提高準(zhǔn)確性和測試人員的積極性,將測試技術(shù)人員解脫出來投入更多精力設(shè)計(jì)更好的測試用例。
參考文獻(xiàn):
[1]張?jiān)掠H.建立自動(dòng)化測試系統(tǒng)的必要性[J].國外電子測量技術(shù),2000(6).
[2]常征.功能測試中自動(dòng)化測試框架的分析與應(yīng)用[D].北京:北京林業(yè)大學(xué),2007.
[3]應(yīng)杭.軟件自動(dòng)化測試技術(shù)及應(yīng)用研究[D].杭州:浙江大學(xué),2006.