國家開發銀行信息科技部 張南
本文旨在通過對自動化測試的概念介紹,進而對自動化測試體系過程進行分析研究,同時結合國家開發銀行核心系統自動化測試案例,來構建適應本行的自動化測試方法,嘗試為本行開發測試中心建設及質量管理等工作提供參考和借鑒。
金融是現代社會的核心,信息科學技術是金融機構的核心。隨著銀行業務的迅猛發展和不斷創新,對其信息系統的要求也與日俱增。這一時期,國內銀行紛紛投入大量資金和人力進行系統的研發和升級工作,軟件項目測試質量逐漸成為制約產品質量提升的瓶頸,這與現代銀行業對軟件產品的高效性和可靠性的要求相背離。
國家開發銀行較早認識到了以上問題,并根據本行IT規劃和布局,在2012年便引入了專業化的測試團隊負責部分測試工作,為提升本行軟件產品整體測試質量進行最初的探索和嘗試。隨著企業內部管理的不斷細化和測試質量工作的日漸規范,截至目前已建立了覆蓋功能測試、性能測試、第三方測試等多方面的測試類別,承接了幾乎所有在建項目的性能測試和第三方測試。近年來,測試團隊年累計執行測試任務都在2000余項,為本行信息系統穩定運行發揮了重要的作用。
但隨著系統規模的不斷擴大和業務特點,測試的難度也在增加。一方面,目前銀行業務系統眾多且關聯關系復雜,同時部分業務因屬于政策性業務,對時間要求較高,項目實施工期短,對測試的質量提出了更高的要求;另一方面,受制于有限的測試資源,包括人力資源、時間資源、流程及工具缺失等因素,不能對系統功能進行全面的回歸測試。
本文引入自動化測試概念,進而從自動化測試工具、策略、方法等多角度來研究分析自動化測試方法,給出自動化測試的優缺點,并結合本行核心系統自動化測試實例,來得出自動化測試在開行的具體應用。
軟件產品的測試類型按照軟件產品生命周期可大致分為組件(單元)測試、集成測試、系統測試、驗收測試以及維護測試。在維護測試階段,最重要的兩種測試類型就是確認測試(再測試)和回歸測試。
目前,在本行信息化項目建設過程中,可較好的執行組件測試、集成測試、系統測試和驗收測試以及維護測試中的確認測試,但對于回歸測試,由于測試工作量大,產品或版本投產時間緊,思想認識不夠等原因,無法確保回歸測試的廣度和深度,造成系統上線后常常伴隨新缺陷的引入。
2.2.1 自動化測試定義
自動化測試,就是軟件測試過程的自動執行。它是將人工進行的測試行為轉化為機器或軟件執行的一種過程。通過在預設狀態下運行應用程序,進而對運行結果進行分析比較,從而檢測系統運行是否正常。
2.2.2 自動化測試常見工具
(1)QTP,是HP公司自動化測試工具,主要面向回歸測試。它可以覆蓋大部分的軟件開發語言,簡單高效,并具備測試用列可重復使用的特點。
(2)Rational Robot,是IMB公司的面向功能測試的自動化測試工具。它集成在測試人員的桌面IBM-Rational Test Manager上,測試人員可以通過該平臺計劃、組織、執行、管理和報告所有測試活動。
(3)WinRunner,是Mercury Interactive公司的企業級自動化測試工具,能夠有效地幫助測試人員對復雜的企業級應用的不同發布版進行測試。
除此之外,常見的自動化測試工具還有如下幾種:AdventNet QEngine、SilkTest、Test Partner、AutoRunner等。
2.2.3 自動化測試適用的對象和時機
要計劃在組織內部實施自動化測試,需要具體問題具體分析。總體來說,實施自動化測試的前提是需求變動不頻繁、項目周期足夠長、自動化測試腳本可以重復使用等。經過研究歸納,得出在銀行業中適合做自動化測試的項目類型有如下兩類:(1)產品型項目,新版本是在老舊版本的基礎上進行開發升級的,整體功能變動不大,這類項目需要在維護測試階段做大量的回歸測試,以確保系統不會產生新的缺陷。(2)機械并頻繁的測試,如性能測試和壓力測試。
2.2.4 自動化測試的優點
自動化測試可以降低大型系統由于變更或者多期開發引起的大量回歸測試人力資源投入,特別是在程序修改比較頻繁時,效果非常明顯。除此以外,自動化測試還具有如下優勢:(1)通過工具的引入,規范了測試流程,可以有效減少人為錯誤導致的系統測試質量不高的問題。(2)由于有不斷完善的測試案例庫,可以保證組織級測試的覆蓋度。(3)測試資源的利用率得到顯著提升,測試周期和新系統研發及上線的周期近而都相應縮短,提升銀行科技部門核心競爭力。(4)進一步提升測試的可回溯性,并有利于對自動化測試人員的考核評價。(5)減少重復機械式的執行測試所用的時間,快速實現回歸測試。
自動化測試與傳統人工測試類似,都需要大致經歷一套完整的測試過程。但自動化測試也有其自身的特點,大致可概述為以下幾步:
步驟一:分析。總體把握系統邏輯,分析出系統體系架構和測試范圍及目標,識別具體的測試需求。
步驟二:設計。設計測試用例,測試用例要足夠明確和清晰,覆蓋面廣而精。
步驟三:實現。主要指腳本的實現,有兩個要求一是斷點,二是合理的運用參數化。
步驟四:執行。執行腳本遠遠沒有我們想象中那么簡單。腳本執行過程中的異常需要我們仔細的去分析原因。
步驟五:總結。測試結果的分析,和測試過程的總結是自動化測試的關鍵。
步驟六:維護。自動化測試腳本的維護是難以解決但又必須要解決的問題。初期會耗費一定人力,但后期效果會呈現的很明顯。
步驟七:分析。在自動化測試過程中深刻的分析自動化用例的覆蓋風險和腳本維護的成本。由此也形成閉環,不斷優化,持續完善。
本章節以國家開發銀行核心系統為例,通過基于QTP自動化測試工具的測試場景分析及案例設計,來闡述自動化測試在本行應用的場景。
本行核心系統自2010年上線以來,系統運行穩定。每年系統都會有20~30次左右的上線任務,在做用戶驗收測試時,只能對程序改動的范圍進行測試,無法對相對更大范圍的功能進行全面測試(回歸)。根據以上實際情況,可以歸納出適合適用自動化測試的場景和需求:
(1)系統日常發布的小版本的回歸測試。如改動支付的模塊時,可以對存款、客戶、總賬等模塊適用自動化測試來驗證程序改動沒有對這些地方產生新的影響。
(2)系統基礎環境升級后所作的全量驗證回歸測試。以本行IE瀏覽器版本升級測試過程中,投入了8家分行共10名業務測試人員,用了2周時間進行測試,如果采用自動化測試工具執行,其測試效率可以大大提高。
(3)與外圍系統的接口測試。核心系統與眾多外圍系統有直連,接口測試也可以使用自動化測試工具,模擬外圍系統的接收或調用,來驗證接口層面的開發是否正確。
QTP工具因其上手快,操作簡便,不需要過多的編程經驗而被各大企業和機構廣泛使用。同時,由于QTP隸屬于HP工具系列,也可與本行目前使用的QC、LoadRunner等工具集成,所以建議本行采用該工具進行自動化測試。
QTP測試過程大概由以下幾部分組成:場景分析與設計→測試實現與執行→結果及分析。下面將以本行核心系統一個典型業務場景測試為切入點,引入QTP的自動化測試方法展開,給出各步驟的具體操作和實際應用。
3.2.1 測試場景分析及設計
【示例:測試某一存款賬戶的余額查詢功能】
分析:賬戶余額查詢是指核心Teller柜面的“存款-查詢-賬戶信息查詢”中的“賬戶余額查詢”交易,通過進一步分析,我們可將該測試任務劃分為更小的5個測試單元:IE瀏覽器登錄核心系統環境→輸入用戶名、密碼進行身份驗證和登錄→菜單欄找到對應交易或直接輸入交易碼→輸入賬號信息,點擊查詢→系統可以正常查詢出結果或報該賬號不存在。針對每個測試單元構建測試組件,準備測試數據。
3.2.2 測試實現和執行
構建具體的測試對象庫和案例并執行測試案例。
(1)創建函數或對象庫。我們將以一個日期控件為例,來說明創建調用日期控件測試的函數。此函數檢查日期是否以 MM/DD/YYYY 格式顯示,該函數還可驗證日期是否有效。
點擊文件→新建→函數庫,或直接單擊工具欄中的“新建函數庫”按鈕,在彈出的函數庫窗口中進行編程,之后保存至函數庫中,并重命名為:CheckDateFunction.qfl。
(2)創建測試案例。在本文中,我們僅以錄制方式來創建測試案例。首先我們可以創建一個Login(登錄)的測試案例。首先選中工具欄中的“Record”按鈕,打開錄制模式。然后在核心系統登錄界面中,輸入用戶名和密碼后,點擊登錄按鈕,系統通過抓屏,自動錄入登錄測試案例的測試腳步。
(3)將函數庫與測試關聯。如該測試場景中有日期控件,可以與第一步中提前定義預設好的日期控件函數做關聯,之后保存該測試案例。
(4)插入檢查點。需要對測試案例中,人工操作插入一些必要的檢查點,以便驗證程序的正確性。通過選中插入→檢查→標準檢查點的方式來操作,比如在Login測試中,設置為登錄成功或失敗。
(5)運行測試案例。選擇工具→選項,或單擊選項按鈕,然后單擊運行→屏幕捕獲節點。在將捕獲的靜態圖像保存到結果選項中,選擇總是。接下來就開始運行測試,點擊“運行”按鈕,即可運行。
3.2.3 測試結果及分析
QTP自動化測試框架產生的測試結果可滿足各種角色人員的使用和查閱需求,執行結束后產生的結果集文件類型有QTP自帶格式的報告文件、文本文件、Access文件、Excel文件和屏幕截圖,如圖1所示。這些結果信息記錄了測試執行過程中每一個操作出現的信息。

圖1 QTP測試結果導出圖Fig.1 Export chart of QTP test results
軟件自動化測試工作是一項長期的、見效較慢的工作,所以要想在組織內或企業內建立和使用自動化測試方法,一定要關注到以下幾點:(1)領導重視,上下一盤棋。領導從上到下高度重視,需要平衡、協調各部門和各單位之間的訴求,解決好整體協調等事項。(2)規劃先行,逐步推廣。各部門要貫徹落實領導指示精神,在自動化測試的宣介、選型、推廣和使用上多下功夫。同時引導各項目組正視自動化測試相關工作,消除抗拒情緒,找1~2個項目進行試點,積累經驗以便后期更好的推廣。(3)功成不必在我,功成必定有我。因為自動化測試工具存在上手快慢的問題,前期需要做大量的培訓和推廣等基礎性工作。故前期投入工作可能未必產生立竿見影的效果,需要持續投入。(4)注重與開發交付體系的結合。要腳踏實地,從建立自動化測試腳本庫,配備專人進行維護和開展相關自動化測試入手,同時與持續集成平臺對接,做到軟件從開發、部署、測試到發布,全流程自動化、一體化處理,提高版本發布質量,達到統一交付的目標。