張明禮
摘要:本文結(jié)合浦發(fā)銀行測試工作實際,說明了自動化測試框架的構(gòu)成及設(shè)計思路,對比了手工測試和自動化測試的成本、收益和適用場景.D
[關(guān)鍵詞]金融業(yè)軟件測試自動化測試
1引言
云計算、大數(shù)據(jù)以及移動支付等新一代互聯(lián)網(wǎng)技術(shù)的革新,推動金融行業(yè)衍生出更多業(yè)務(wù)模式,推出更多產(chǎn)品和服務(wù)。然而隨著產(chǎn)品線的拉長,發(fā)布周期的縮短,投產(chǎn)變更風(fēng)險隨之增大,對研發(fā)測試質(zhì)量也提出了更高的要求。自動化測試是一種讓計算機代替手工的測試方法,通過自動化技術(shù)手段模擬人工完成測試案例的執(zhí)行工作,通過完成大量可重復(fù)性、相對穩(wěn)定的測試案例執(zhí)行工作,將大量的人力從枯燥的測試執(zhí)行工作中釋放出來,節(jié)省測試工作周期。自動化測試技術(shù)可以高效檢測出系統(tǒng)缺陷,明顯降低銀行IT系統(tǒng)的測試成本,縮短系統(tǒng)發(fā)布周期,但也存在初期投入大,維護成本高等問題。如何結(jié)合手工測試并充分發(fā)揮自動化測試的作用?如何將自動化測試技術(shù)應(yīng)用到金融行業(yè)的核心系統(tǒng)測試?本文進行理論和實踐的探索。
2解決方案概覽
根據(jù)我們在測試實踐中的經(jīng)驗總結(jié),自動化測試需要考慮測試項目管理、測試要素管理、測試執(zhí)行的動態(tài)均衡調(diào)度等多個關(guān)鍵問題。圖1展示了自動化測試解決方案示意圖。
2.1測試項目管理
我們經(jīng)常遇到多個系統(tǒng)的集中變更,因此經(jīng)常需要同時開展多個測試項目,而多項目的并發(fā)進行容易造成測試資源管理的混亂,延長了系統(tǒng)發(fā)布周期,提高了測試成本。測試項目管理負責(zé)對多個并發(fā)進行的測試所使用到的流程、工具、方法和資源進行規(guī)劃和監(jiān)控,按項目生命周期組成的整體統(tǒng)一管理流程,能夠有效減少由于測試項目數(shù)量增大造成的混亂狀況,幫助組織機構(gòu)掌控測試的開展,了解測試進度、合理安排測試階段,使得測試項目有序進行。
2.2測試要素管理
不同的測試項目可能同時需要使用測試資源,因而需要跨項目的測試要素管理,實現(xiàn)合理分配資源、控制風(fēng)險。測試要素管理用于管理測試工作各個環(huán)節(jié)的參與要素,包括測試需求、測試案例、測試數(shù)據(jù)、測試環(huán)境信息及測試版本管理等,能夠做到統(tǒng)一管理,保障測試流程高效運轉(zhuǎn),測試執(zhí)行全面監(jiān)控。
測試要素管理是支持自動化測試實施的核心。自動化測試需要對測試執(zhí)行全過程的所有參與要素進行細粒度的控制,用來支持測試啟動,測試過程和結(jié)果記錄等眾多自動化步驟的實現(xiàn)。為了提高自動化測試能力,測試要素管理模塊需要對多種測試要素數(shù)據(jù)存儲和管理進行優(yōu)化,從而能夠支持對大規(guī)模測試的功能和性能要求。
2.3測試執(zhí)行動態(tài)調(diào)度
自動化測試的關(guān)鍵環(huán)節(jié)是測試執(zhí)行的高效率實現(xiàn)。對于復(fù)雜的金融系統(tǒng),數(shù)量龐大的測試案例對測試管理和測試執(zhí)行效率帶來了雙重挑戰(zhàn)。可以采用測試案例的分級管理,按照是否并發(fā)運行分類,也可以根據(jù)測試需求的實際需要構(gòu)建不同的測試場景,可以有效降低管理復(fù)雜度。同時,通過部署在執(zhí)行機(移動設(shè)備)上的微代理,調(diào)度端可及時掌握該執(zhí)行機(移動設(shè)備)的軟硬件資源配置情況、自動化任務(wù)執(zhí)行情況等。測試執(zhí)行機資源不再與單個測試項目綁定,實現(xiàn)執(zhí)行機資源按需動態(tài)分配,測試執(zhí)行機(移動設(shè)備)可以被多個項目使用,實現(xiàn)資源復(fù)用,最大限度提高測試執(zhí)行效率。
3成功案例
浦發(fā)銀行云測試管理平臺是按照上述方案搭建的自動化測試工作平臺,通過提高自動化測試水平、對接測試資源池和集成行業(yè)測試工具,實現(xiàn)了并發(fā)測試任務(wù)與測試資源的自動匹配、調(diào)度和管理,支持接口類、字符終端類、GUI界面類、Web頁面類和移動應(yīng)用類等多種類型的自動化測試,為用戶提供了按需響應(yīng)的測試服務(wù)。
3.1系統(tǒng)組成
3.1.1測試項目與要素管理模塊
測試項目管理模塊支持測試項目統(tǒng)一流程管理,為管理層提供測試項目進度視圖。測試項目管理模塊包含五個核心功能包括:項目管理,計劃管理,度量分析,資源管理和監(jiān)控等。測試項目管理模塊覆蓋功能、技術(shù)類測試等全部測試類型。
測試要素管理模塊能夠全面管理各個測試項目全生命周期的各類測試資源,包括測試需求、測試案例、測試數(shù)據(jù)、測試缺陷和測試結(jié)果等測試要素,從而為質(zhì)量測試全面監(jiān)控提供細粒度的管理支持。圖2是測試要素管理模塊的示意圖。
3.1.2測試動態(tài)調(diào)度執(zhí)行模塊
測試動態(tài)調(diào)度執(zhí)行模塊包括分發(fā)主控服務(wù)器和自動化測試執(zhí)行客戶端。自動化測試分發(fā)主控服務(wù)器負責(zé)接收測試計劃執(zhí)行請求,按照測試計劃提供的配置,打包分發(fā)各個測試場景中的業(yè)務(wù)流,并接收自動化測試執(zhí)行客戶端返回的執(zhí)行結(jié)果信息。同時,提供一系列的API,供其它系統(tǒng)監(jiān)控執(zhí)行情況和獲取執(zhí)行結(jié)果數(shù)據(jù)。
分發(fā)主控服務(wù)器支持多任務(wù)并發(fā)下的測試申請,自動匹配執(zhí)行機(移動設(shè)備)資源池中可用資源。分發(fā)調(diào)度主要遵循以下原則:“按優(yōu)先級匹配原則(缺省為先到先服務(wù));最小屬性集優(yōu)先匹配原則,先滿足先執(zhí)行”。動態(tài)調(diào)度支持執(zhí)行機資源分配動態(tài)伸縮,主要包括“資源充足時貪婪分配算法和資源緊張時均衡收縮算法”。負載均衡調(diào)度機制支持測試案例執(zhí)行的進度監(jiān)控。對于緊急發(fā)生的測試需求,平臺支持人工干預(yù),對測試任務(wù)進行必要調(diào)整。圖3是動態(tài)均衡調(diào)度機制示意圖。
3.1.3自動化控件管理模塊
基于原子控件的自動化案例設(shè)計模式通過對用戶操作行為的分析,將被測系統(tǒng)中的用戶控件進行原子化操作分類,例如文本輸入、點擊(按鈕、鏈接)、選擇(單選、多選)、滑動等,以實現(xiàn)對被測系統(tǒng)中原子化操作的定向驅(qū)動。同時支持基于原子控件的二次封裝,以更好的適應(yīng)項目的具體需要。例如網(wǎng)銀系統(tǒng)自動化測試案例準備時,既可以直接使用原子控件WebClick,也可以使用二次封裝后的UIAPEBLogin控件。
用戶使用構(gòu)建好的自動化原子控件庫即可完成案例的組裝,此模式可有效支持同應(yīng)用類型不同業(yè)務(wù)系統(tǒng)的自動化驅(qū)動,更好的復(fù)用自動化封裝的控件庫資產(chǎn),最大化的降低自動化封裝工程師的代碼封裝工作,并且專注于具體業(yè)務(wù)系統(tǒng)中的非標準、安全類、外設(shè)類等控件的自動化封裝處理工作上。
3.1.4測試數(shù)據(jù)管理模塊
針對金融行業(yè)IT系統(tǒng)的海量數(shù)據(jù)和數(shù)據(jù)安全性特征,平臺支持對多項目跨系統(tǒng)的共享測試數(shù)據(jù)進行統(tǒng)一管理,最大限度復(fù)用測試數(shù)據(jù),縮短測試數(shù)據(jù)的準備周期。為提高測試數(shù)據(jù)的使用效率,從測試案例執(zhí)行前的靜態(tài)配置擴展到執(zhí)行時進行動態(tài)配置,提高測試數(shù)據(jù)執(zhí)行時的使用效率。將共享數(shù)據(jù)(如柜員、憑證等)的分配放在執(zhí)行時,通過案例編寫時的配置,測試案例在執(zhí)行時再去查詢共享數(shù)據(jù)并加鎖使用,使用完成后再解鎖。這樣保障了共享測試數(shù)據(jù)的使用效率,同時也節(jié)省了數(shù)據(jù)準備成本。
3.2自動化測試方案特點
(1)適用范圍廣泛。適用于接口類、字符終端類、GUI界面類、Web頁面類和移動應(yīng)用類等多種系統(tǒng)的自動化測試。
(2)自動化程度高。支持無人值守,具有執(zhí)行過程自動記錄,錄像回放等功能,并支持對失效點的定位顯示,加快缺陷定位和修復(fù)進程。
(3)性能出色。支持上萬數(shù)量級的并發(fā)測試案例執(zhí)行,得益于其并發(fā)測試執(zhí)行的動態(tài)均衡調(diào)度機制。高效的并發(fā)測試執(zhí)行調(diào)度,能夠最大限度發(fā)揮資源利用率。
(4)低成本。通過對金融行業(yè)的常用功能建立自動化測試原子控件,支持對原子控件的二次封裝,實現(xiàn)用戶自定義的自動化測試,減少對測試人員的編程能力要求,進一步降低了測試成本。
(5)擴展性好。易于和第三方測試工具集成。平臺提供開放的API接口,方便第三方工具集成,例如,可快速集成JIRA,SELENIUM等,從而有效整合測試資源。
3.3效果分析
以核心產(chǎn)品化系統(tǒng)投產(chǎn)驗證測試為例,單個變更需要回歸執(zhí)行的測試案例數(shù)約為6000個。變更的發(fā)布周期平均為2周,包括審批變更計劃,編譯部署,測試,修復(fù),復(fù)測以及發(fā)布上線多個階段,其中可用于測試的時間窗為在3個工作日內(nèi)。按一個工作日8小時計算,手工測試人員在3天可以完成500個回歸測試案例的執(zhí)行,完成6000個案例的測試執(zhí)行需要配置12人完成。采用自動化測試方案后,可以24小時無人值守連續(xù)運行,完成單個測試案例的統(tǒng)計平均執(zhí)行時間為0.5分鐘,一"次執(zhí)行平均執(zhí)行時間約為2小時。
在測試規(guī)模較小時,手工測試和自動化測試在時間消耗上差別不大。假定測試人員工作效率恒定,隨著測試規(guī)模增大,在測試時間窗內(nèi)所需要的測試人員數(shù)量急劇增加,此時的應(yīng)對策略是潮汐式的增加測試人員或者對測試范圍進行剪裁。如果采用自動化測試,則可以通過添加執(zhí)行機方式實現(xiàn)并發(fā)測試能力擴展,自動獲得對超大測試案例集的測試能力。
3.4與手工測試的對比
我們知道,自動化測試的準備工作包括測試案例(腳本)的編寫,測試數(shù)據(jù)的準備等環(huán)節(jié),首次測試時成本較高,在自動化案例維護成本可控的情況下,其收益與迭代執(zhí)行次數(shù)成正比,自動化測試帶來的收益計算公式為:迭代執(zhí)行次數(shù)*(手工執(zhí)行成本一案例維護成本)一首次自動化測試準備成本。自動化測試和手工測試的成本曲線對比參見圖4。
雖然自動化測試在效益和效率上可帶來一定程度的提升,但自動化測試并不能取代手工測試,除了首次自動化的準備工作外,我們?nèi)孕枰斯みM行測試結(jié)果的分析確認,測試過程中異常排查以及業(yè)務(wù)變更引發(fā)的自動化案例維護等工作。表1中從不同緯度對兩者進行了對比。
在開展應(yīng)用系統(tǒng)自動化測試時,可結(jié)合上表和自動化測試收益計算公式進行判斷。根據(jù)我們的經(jīng)驗,具有以下特點的系統(tǒng)適合做自動化測試:
(1)系統(tǒng)生命周期長,變更頻率較高;
(2)系統(tǒng)重要性與出錯代價高,往往直接面向外部客戶的系統(tǒng);
(3)系統(tǒng)功能點多,回歸測試執(zhí)行工作量大;
(4)軟件前端界面、接口相對穩(wěn)定。對于大部分的金融應(yīng)用系統(tǒng)來說,使用自動化測試確實能夠?qū)鹑贗T系統(tǒng)的變更進行全面的回歸測試,保障開門交易等重點交易不受變更的影響,從而有力保障金融業(yè)務(wù)系統(tǒng)的穩(wěn)定可靠運行。
4小結(jié)
目前金融行業(yè)中在倡導(dǎo)DevOps理念,提倡加強開發(fā)、測試、運維團隊之間的協(xié)作,以適應(yīng)越來越快的軟件發(fā)布頻率,這就必然要求提高軟件開發(fā)、測試、投產(chǎn)全過程中各環(huán)節(jié)的自動化水平。我們認為自動化測試是手工測試的有益補充,在實際工作中也常常需要把自動化測試和手工測試結(jié)合起來才能達到最佳的收益,從而更快更好地滿足金融行業(yè)對IT系統(tǒng)高可靠性的需要。
參考文獻
[1]陳洪震,淺析我國金融電子化的發(fā)展現(xiàn)狀及其風(fēng)險防范[J].科技經(jīng)濟導(dǎo)刊,2016.
[2]闞青.對軟件測試過程中的質(zhì)量管理及風(fēng)險應(yīng)對分析[J].電子技術(shù)與軟件工程,2019.
[3]齊海燕,黃少敏,自動化回歸測試在軟件產(chǎn)品項目中的應(yīng)用[J].工業(yè)控制計算機,2018.