束 進(jìn)
(中海網(wǎng)絡(luò)科技股份有限公司,上海200135)
隨著我國高速公路建設(shè)的不斷開展,高速公路收費(fèi)系統(tǒng)已經(jīng)遍布全國各地,在我國交通運(yùn)輸事業(yè)的發(fā)展進(jìn)程中扮演著重要的角色。其中,高速公路收費(fèi)系統(tǒng)軟件的測試是保證高速公路收費(fèi)系統(tǒng)軟件質(zhì)量的關(guān)鍵過程之一,對確保高速公路收費(fèi)系統(tǒng)正常運(yùn)行具有十分重要的作用。
隨著各省高速公路規(guī)模的日益擴(kuò)大,以及區(qū)域聯(lián)網(wǎng)的開展,高速公路收費(fèi)系統(tǒng)軟件的規(guī)模也隨之不斷擴(kuò)大,邏輯性不斷加強(qiáng),功能不斷被拓展。因此,這些軟件產(chǎn)品的系統(tǒng)測試變得越來越困難和復(fù)雜,傳統(tǒng)的人工測試的局限性也越來越明顯。自動化軟件測試技術(shù)正是在這樣的背景下受到了密切的關(guān)注,成了近年來軟件測試的重要研究方向,被越來越多的應(yīng)用在了軟件測試的各個(gè)階段。研究面向高速公路收費(fèi)系統(tǒng)的自動化測試技術(shù),目的是為了節(jié)省測試成本、提高產(chǎn)品的測試效率、縮短研發(fā)周期,從而滿足客戶對高速公路收費(fèi)系統(tǒng)的需求。因此,設(shè)計(jì)并實(shí)現(xiàn)一種適合高速公路收費(fèi)系統(tǒng)的自動測試框架具有重要的意義。
所有能夠有效組織和管理自動化測試中所必需的各個(gè)組件、能夠有計(jì)劃地執(zhí)行自動化測試并且支持測試結(jié)果分析和測試過程改進(jìn)的結(jié)構(gòu)實(shí)例或文件實(shí)例都可以稱作自動測試框架。
目前普遍存在的自動測試框架有以下幾種:
1.數(shù)據(jù)驅(qū)動框架:當(dāng)測試對象流程固定不變(僅僅數(shù)據(jù)發(fā)生變化)時(shí),可以使用這種測試框架。測試數(shù)據(jù)是由外部提供的,如Excel表、XML等。
2.關(guān)鍵字驅(qū)動框架:這種自動測試框架提供了一些通用的關(guān)鍵字,這些關(guān)鍵字適用于各種類型的系統(tǒng)。此外,其還為自動化測試工具和被測系統(tǒng)提供了抽象性。例如,它可以使用相同的測試用例來測試類似的Web和Windows系統(tǒng)。關(guān)鍵字驅(qū)動的測試框架因?yàn)槭褂昧送獠康臄?shù)據(jù)源(比如Excel數(shù)據(jù)表)讀取腳本中的關(guān)鍵字和測試過程,所以較難調(diào)試。
3.混合型框架:這種自動測試框架同時(shí)具有數(shù)據(jù)驅(qū)動型框架和關(guān)鍵字驅(qū)動型框架的優(yōu)點(diǎn),不僅有通用的關(guān)鍵字,還有基于被測系統(tǒng)業(yè)務(wù)邏輯的關(guān)鍵字。
以上幾種框架各有優(yōu)缺點(diǎn),對于較為復(fù)雜的軟件,單獨(dú)依靠數(shù)據(jù)驅(qū)動或關(guān)鍵字驅(qū)動無法完全滿足軟件的測試需求,一般會采用混合型自動測試框架。
近些年,為了滿足市場和客戶的需求,公司高速公路收費(fèi)軟件的版本升級的頻率越來越頻繁,測試周期不斷被壓縮。讓手工測試人員在有限的時(shí)間內(nèi)去驗(yàn)證成百上千的測試用例,基本上成為了不可能實(shí)現(xiàn)的任務(wù)。由于傳統(tǒng)的手工測試已經(jīng)無法滿足企業(yè)進(jìn)行有效的軟件測試,自動化測試技術(shù)應(yīng)運(yùn)而生,但是目前的自動化測試技術(shù)卻很難在企業(yè)中得到實(shí)際應(yīng)用。
1.軟件變更引發(fā)的自動化測試程序的變更維護(hù)量超出了手工測試的工作量,使得自動化測試技術(shù)成為了一個(gè)“美麗的謊言”。
2.企業(yè)內(nèi)大部分測試人員精通測試業(yè)務(wù),但是不熟悉自動化技術(shù);新招聘的自動化測試人員熟悉測試技術(shù),而又不了解測試業(yè)務(wù)。二者資源無法在短時(shí)間內(nèi)融合,使得企業(yè)無法接受需要投入的成本。
隨著企業(yè)對自動化的期望越來越高,各類自動化測試工具逐漸熱銷。運(yùn)用這些工具,基本上可通過錄制技術(shù)快速地形成測試腳本進(jìn)行一些參數(shù)化或檢查點(diǎn)設(shè)置的腳本修正工作,而后點(diǎn)擊回放按鈕,就可以很“輕松”地完成一次軟件測試。但是,后期大量的自動化測試腳本維護(hù)工作使得企業(yè)投入成為了一個(gè)無底洞。運(yùn)用該方法不僅僅沒有真正解決軟件測試問題,反而造成“高投入、低產(chǎn)出”問題凸現(xiàn),這使得很多企業(yè)不得不再重新回歸到手工測試模式。
自動測試化框架就是為了組織在測試過程中被拆解細(xì)化的各個(gè)測試組件而存在的,能夠有效組織和管理自動化測試過程中的活動,能夠解決自動化測試中出現(xiàn)的問題。
一些成熟的自動測試框架已經(jīng)廣泛應(yīng)用于軟件開發(fā)項(xiàng)目中。其中,XUnit是基于測試驅(qū)動開發(fā)的測試框架,適用于單元測試,JUnit和Cpp Unit都屬于XUnit;Apache JMeter是Web應(yīng)用程序的性能測試框架,用于分析重負(fù)載情況下整個(gè)服務(wù)器的性能;Seleniu m是Thought Wor ks專門為Web應(yīng)用軟件設(shè)計(jì)的驗(yàn)收測試框架。然而,很難找到一個(gè)適合高速公路收費(fèi)軟件的自動測試框架,而這一框架就是所需要研究的方向。
QTP(Quick Test Professional)提供符合主要應(yīng)用軟件環(huán)境的功能測試和回歸測試的自動化,采用關(guān)鍵字驅(qū)動的理念以簡化測試用例的創(chuàng)建和維護(hù)。
然而,只使用QTP的錄制回放功能得到的測試腳本去測試高速公路收費(fèi)軟件是有缺陷的。因?yàn)檫@些測試腳本是隨機(jī)創(chuàng)建的,測試數(shù)據(jù)和軟件操作混合在了一起,即使測出軟件缺陷也很難進(jìn)行追蹤和重現(xiàn),而且維護(hù)成本也是非常高的。
為此,設(shè)計(jì)了基于QTP的高速公路收費(fèi)軟件自動測試框架,由于高速公路收費(fèi)軟件涉及多個(gè)層級,較為復(fù)雜,采用混合型自動測試框架進(jìn)行設(shè)計(jì)。該框架定義好了一組自動化測試的規(guī)范、測試腳本的基礎(chǔ)代碼,以及測試用例的集合。通過使用該框架,可以減少冗余測試代碼,提高試代碼生產(chǎn)率、可重用性和可維護(hù)性。此外,通過將該框架復(fù)用到很多類型相同或相近的項(xiàng)目中,還可大大節(jié)省測試成本。
圖1 基于QTP的高速公路收費(fèi)軟件自動測試框架架構(gòu)
基于QTP的高速公路收費(fèi)軟件自動測試框架架構(gòu)見圖1,分為以下幾個(gè)部分:
3.1.1 測試數(shù)據(jù)層
測試數(shù)據(jù)層包括測試用例庫和測試數(shù)據(jù)庫。
(1)測試用例庫包括對象庫、業(yè)務(wù)組件庫和函數(shù)庫。測試用例是一系列測試步驟的集合,與手工測試中的一個(gè)或多個(gè)業(yè)務(wù)流程相對應(yīng)??梢詮臏y試用例中讀取測試數(shù)據(jù)、設(shè)置檢查點(diǎn)、生成日志文件、調(diào)用業(yè)務(wù)組件和公共函數(shù)。
被測應(yīng)用程序所有對象被錄制后都會被保存到一起,形成對象庫。
業(yè)務(wù)組件是一些重用性比較強(qiáng)的測試腳本,通過調(diào)用業(yè)務(wù)組件,可以提高測試腳本的開發(fā)效率,降低測試腳本的維護(hù)成本。
函數(shù)庫包含擴(kuò)展函數(shù)和常規(guī)函數(shù)兩大類,它們之間的區(qū)別在于是否跟被測應(yīng)用程序控件有交互。
(2)測試數(shù)據(jù)是自動化測試的一個(gè)重要組成部分,包括輸入數(shù)據(jù)、輸出數(shù)據(jù)和檢查點(diǎn)數(shù)據(jù)。所有測試數(shù)據(jù)都將按統(tǒng)一的規(guī)范管理,任何測試數(shù)據(jù)都不能被某個(gè)QTP腳本私有。
3.1.2 測試邏輯層
測試邏輯層包括批量執(zhí)行列表和批量執(zhí)行驅(qū)動器。
(1)批量執(zhí)行列表包括了所有的測試用例。為了方便管理,通過設(shè)置測試用例的屬性來決定是否執(zhí)行該測試用例,以及在哪個(gè)環(huán)境中執(zhí)行。
(2)批量執(zhí)行驅(qū)動器是整個(gè)框架的核心,其主要工作包括控制測試用例的執(zhí)行和生成測試報(bào)告。如果被測應(yīng)用程序出現(xiàn)異常,驅(qū)動器將強(qiáng)行關(guān)閉應(yīng)用程序及相關(guān)服務(wù)。
3.1.3 測試展示層
測試展示層主要是指測試報(bào)告。
批量執(zhí)行驅(qū)動器將執(zhí)行成功和執(zhí)行失敗的測試用例的個(gè)數(shù),以及完成整個(gè)測試任務(wù)所用的時(shí)間記錄下來,通過測試報(bào)告可以查詢和打印測試的結(jié)果。
該自動化框架應(yīng)具有以下特點(diǎn):
(1)實(shí)現(xiàn)測試數(shù)據(jù)的統(tǒng)一管理,將測試數(shù)據(jù)從測試腳本中抽離出來;
(2)實(shí)現(xiàn)空間對象的統(tǒng)一管理,所有的控件對象都是獨(dú)立于測試腳本的;
(3)實(shí)現(xiàn)測試腳本的模塊化和封裝性,提高測試腳本的可維護(hù)性;
(4)測試腳本可以批量執(zhí)行,并且生成集成的測試報(bào)告;
(5)方便實(shí)施,不會因?yàn)橐胱詣踊蚣芏黾宇~外的工作量。
使用該框架可以在無人監(jiān)管的情況下實(shí)現(xiàn)多個(gè)測試用例連續(xù)執(zhí)行,自動化腳本的運(yùn)行過程為:
(1)測試人員通過啟動驅(qū)動器執(zhí)行自動化測試;
(2)驅(qū)動器從批量執(zhí)行列表中讀取第一個(gè)測試用例的ID,開始執(zhí)行第一個(gè)測試用例;
(3)測試用例根據(jù)ID將相應(yīng)的測試數(shù)據(jù)加載到QTP的Global Table中,并在指定的測試報(bào)告中記錄每一步的測試結(jié)果;
(4)當(dāng)?shù)谝粋€(gè)測試用例執(zhí)行完畢后,驅(qū)動器再次回到批處理Excel文件中讀取第二個(gè)測試用例的ID,如此循環(huán)下去,直到所有的測試用例執(zhí)行完成;
(5)驅(qū)動器在測試報(bào)告中記錄執(zhí)行成功和執(zhí)行失敗的測試用例的個(gè)數(shù),以及完成整個(gè)測試任務(wù)所用的時(shí)間。
3.2.1 測試數(shù)據(jù)
框架采用SQL SERVER數(shù)據(jù)庫管理測試數(shù)據(jù),所有測試都集中在該數(shù)據(jù)庫里(每個(gè)項(xiàng)目對應(yīng)一個(gè)測試數(shù)據(jù)庫)。所有的測試數(shù)據(jù)使用完畢后都會被備份保存,下次測試類似項(xiàng)目時(shí)可以借用。
當(dāng)執(zhí)行到某一測試用例時(shí),初始化函數(shù)會將其對應(yīng)的測試數(shù)據(jù)加載到r unti me Data Table中去。當(dāng)測試用例執(zhí)行結(jié)束時(shí),r unti me Data Table會被自動清空,并準(zhǔn)備加載下一個(gè)測試用例的測試數(shù)據(jù)。
每組測試數(shù)據(jù)占用數(shù)據(jù)庫的一個(gè)表,并按照測試腳本的ID進(jìn)行命名和排序。每個(gè)表的每一行測試數(shù)據(jù)代表一次循環(huán)。一張表格內(nèi)的測試數(shù)據(jù)不得重復(fù),否則QTP無法正常讀取數(shù)據(jù)(不同表間的測試數(shù)據(jù)沒有限制)。
3.2.2 對象庫
該自動化測式框架中的對象庫被所有的測試用例和業(yè)務(wù)組件庫共同擁有,被測試的應(yīng)用程序的所有對象都會被錄制并保存在對象庫中,否則QTP腳本將無法正常運(yùn)行。另外,為了便于維護(hù)對象庫,任何對象都不能歸某個(gè)QTP腳本私有。
3.2.3 函數(shù)庫
該自動化測式框架中的函數(shù)庫主要包含兩大類函數(shù):擴(kuò)展函數(shù)和常規(guī)函數(shù)。它們之間的區(qū)別在于是否與被測應(yīng)用程序控件有交互。
擴(kuò)展函數(shù)中的活動與被測應(yīng)用程序控件是有交互的,例如直接操作控件、對控件發(fā)出請求、或接受控件返回的信息。與QTP的函數(shù)相比,我們設(shè)計(jì)的擴(kuò)展函數(shù)與被測應(yīng)用程序的關(guān)系更加緊密,在測試腳本中的可用性也比較強(qiáng),既能操作控件,又能察覺錯(cuò)誤并進(jìn)行糾正。
擴(kuò)展函數(shù)為應(yīng)用程序和QTP提供了一個(gè)中間層。有了這個(gè)中間層,自動化測試腳本對QTP的依賴就會減弱。即使是使用更新版本的QTP,自動化測試腳本也無需進(jìn)行重大的改變,只需要調(diào)整擴(kuò)展函數(shù)即可。
3.2.4 業(yè)務(wù)組件庫
不同的測試用例間可能會有很多相同的測試步驟,如果將這些測試步驟組織成可以重用的業(yè)務(wù)組件,那么只需要調(diào)用業(yè)務(wù)組件就可以達(dá)到相同的測試目的。因此,框架采用了基于業(yè)務(wù)組件的腳本模型,可以實(shí)現(xiàn)測試腳本的模塊化和封裝性,提高測試腳本的編寫效率和可維護(hù)性。
在該框架中,業(yè)務(wù)組件與函數(shù)的不同在于,函數(shù)實(shí)現(xiàn)了獨(dú)立于應(yīng)用程序業(yè)務(wù)邏輯的功能,例如系統(tǒng)變量設(shè)置和異常處理等。而業(yè)務(wù)組件實(shí)現(xiàn)的是與應(yīng)用程序業(yè)務(wù)邏輯相關(guān)的測試活動,如登錄、注冊和退出應(yīng)用程序等。函數(shù)庫可以被不同的項(xiàng)目開發(fā)團(tuán)隊(duì)共享,業(yè)務(wù)組件卻做不到這一點(diǎn),被測應(yīng)用程序不同,業(yè)務(wù)組件可能大相徑庭。
實(shí)施自動化測試的一項(xiàng)重要工作就是執(zhí)行自動化測試腳本。通常情況下,測試人員都是使用QTP中的運(yùn)行命令來執(zhí)行單個(gè)測試腳本。如果在執(zhí)行過程中出現(xiàn)了問題,測試人員往往會直接中止運(yùn)行,立即分析出錯(cuò)原因。用這種方法執(zhí)行自動化測試時(shí),測試人員在腳本運(yùn)行期間必須一直在一旁觀察,無法做其他事情,因此,在框架中建立了批量執(zhí)行驅(qū)動器和批量執(zhí)行列表。在批量執(zhí)行多個(gè)QTP腳本時(shí),能夠?qū)崿F(xiàn):
(1)在無人監(jiān)管的情況下批量執(zhí)行;
(2)中間一個(gè)測試腳本出了問題,后面的測試腳本不會受到影響;
(3)測試數(shù)據(jù)互不干擾;
(4)生成集成的測試結(jié)果。
測試人員只需要事先在配置文件中將待執(zhí)行腳本的運(yùn)行狀態(tài)改為TRUE,然后直接運(yùn)行驅(qū)動器即可。驅(qū)動器首先會加載配置文件,然后創(chuàng)建記錄測試結(jié)果所需的Excel文件;接著,讀取配置文件中第一個(gè)腳本的名稱,開始執(zhí)行測試用例;如此循環(huán),直到所有的測試執(zhí)行完成;最后,驅(qū)動器計(jì)算出執(zhí)行成功和執(zhí)行失敗的測試用例的個(gè)數(shù),分別記錄在測試報(bào)告的相應(yīng)字段。
QTP自帶的測試報(bào)告雖然方便易懂,但不適合在自動測試框架中使用,因?yàn)闇y試人員從中提煉出想要的信息往往要花很長時(shí)間。在自動化框架中,提供了測試報(bào)告生成功能,只須通過統(tǒng)一調(diào)用該功能,即可達(dá)到自動生成測試報(bào)告的目的。在測試用例執(zhí)行的過程中,該功能可以將測試中產(chǎn)生的錯(cuò)誤信息、日志信息、測試結(jié)果及其所屬的測試步驟集成到Excel文件中。
測試人員可以點(diǎn)擊測試腳本鏈接看到測試腳本每一步運(yùn)行的詳細(xì)結(jié)果,包括測試步驟簡要描述、期望測試結(jié)果、實(shí)際測試結(jié)果等信息。測試人員通過詳細(xì)結(jié)果部分,可以很容易地分析出測試執(zhí)行失敗的原因。
自動測試框架中提供接口,測試人員只需提供QC的登錄信息和QTP工作目錄的絕對路徑,即可自動將多個(gè)QTP測試腳本連續(xù)上傳到QC,無須進(jìn)行監(jiān)控。
高速公路收費(fèi)軟件一般由車道收費(fèi)、票據(jù)管理、卡管理、財(cái)務(wù)管理、圖片管理、參數(shù)管理、車道監(jiān)視管理、運(yùn)行管理、稽查稽核管理、數(shù)據(jù)傳輸管理、清分結(jié)算管理和費(fèi)率管理等模塊組成。
依據(jù)這些業(yè)務(wù)功能對其中可以執(zhí)行自動化測試的子模塊構(gòu)建業(yè)務(wù)組件庫;針對每個(gè)子模塊識別對象庫,建立公用函數(shù)庫;依據(jù)業(yè)務(wù)流程建立對應(yīng)的測試腳本,形成批量執(zhí)行列表;通過基于QTP的自動測試框架執(zhí)行自動化測試。
在實(shí)際使用了該框架進(jìn)行項(xiàng)目測試后,發(fā)現(xiàn)這種框架設(shè)計(jì)非常有效。
1)減少了30%~50%甚至更多的腳本編寫工作量;系統(tǒng)越大,優(yōu)點(diǎn)越明顯。
2)后期維護(hù)難度和工作量在統(tǒng)一管理下大幅度下降。
3)減輕了測試管理服務(wù)器的壓力。針對所購買的QTP License較少的情況,通過框架的統(tǒng)一協(xié)調(diào)運(yùn)行和管理,在很大程度上緩解了由于License有限帶來的時(shí)效性不高的問題。
圖2 業(yè)務(wù)功能的測試腳本結(jié)構(gòu)
經(jīng)過對高速公路收費(fèi)軟件的實(shí)際測試應(yīng)用證明,基于QTP的智能交通軟件自動測試框架具有測試周期短、測試質(zhì)量高等特點(diǎn),有效地提高了軟件自動化測試中測試代碼的可重用性和可維護(hù)性。
[1] 黃文高.QTP自動化測試與框架模型設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2008.
[2] 陳能技.QTP自動化測試進(jìn)階[M].北京:電子工業(yè)出版社,2010.