劉峰耀 張國慶
(英大泰和財產保險股份有限公司 北京市 100005)
自1985年第一款名為AutoTester 自動化測試工具出現到現在,已經有35年的歷程,而自動化測試工具也在隨著軟件開發時代的變遷而發生著變化。從具備簡單錄制回放功能的線性測試工具,到具備數據驅動的框架階段[1],再到現在以關鍵字驅動[2]以及更先進的智能驅動框架,自動化測試工具的演進速度越來越快。特別是隨著移動互聯技術的發展以及企業線上化轉型步伐的加快,對軟件迭代更新的頻率要求越來越高,軟件開發模型開始從瀑布模型向敏捷開發模型轉變,傳統的手工測試或者較為落后的自動化測試工具,很難應付軟件開發的快速迭代和變更。在此情況下,研發針對保險行業的自動化測試平臺,構建適應保險行業的自動化測試體系,是當前大部分保險公司運維模式改進的方向。
從測試環節上分,軟件測試包含了單元測試、集成測試、性能測試以及回歸測試等環節;從測試對象上分,包含了基于界面的功能提供型系統、基于接口的服務提供型系統和基于移動技術的APP系統。傳統意義上的自動化測試工具,主要是針對基于界面的UI自動化測試而研發,未考慮對于接口或者APP的自動化測試等場景。同時,測試環節主要是應用在回歸測試上,隨著基于Devops 運維模式的流行和敏捷開發模式的應用,測試也需要“敏捷化”,各個測試環節都需要更高的執行效率和響應速度,也需要采用自動化測試。
因此,保險自動化測試管理平臺的建設重點在以下兩個方向展開:一是基于“立體式”全方位自動化測試的理念,構建自動化測試“一站式”解決方案,把UI、接口和APP 自動化測試集成在一起,在一個平臺上同時進行UI、接口和APP 自動化測試;二是除了在上線前的模擬生產測試中應用全流程自動化測試以外,需要逐步將自動化測試應用到集成測試、單元測試等環節,真正達到“敏捷測試”的速度要求。而實現自動化測試的全環節使用,需要自動化測試平臺具備足夠的自動或智能特性,能夠自動生成自動化測試用例和腳本,減少測試人員手工編寫測試腳本所耗費的學習成本和使用成本。
根據對項目整體需求的分析,確定自動化測試平臺主要包括5類功能需求。平臺整體功能結構如圖1 所示。
(1)系統管理:包括用戶管理、角色管理、項目管理、客戶端管理以及監控管理等功能。通過用戶管理實現對用戶的增加、刪除、修改、查詢、導入、導出和解鎖功能;通過角色管理提供用戶角色權限的設置;通過項目管理提供被測系統所屬項目的管理;通過客戶端管理提供客戶端的查詢、添加、修改、刪除;通過監控資源功能管理各個自動化執行機和各個執行機的權限。

圖1:自動化測試平臺功能結構圖

圖2:自動化測試平臺應用架構圖

圖3:用例分層設計結構圖

圖4:自動生成用例邏輯圖
(2)測試管理:用例管理提供自動化用例的查詢、添加、修改、復制用例、發布等功能;用例模塊提供項目的模塊化管理,能夠對各個項目進行模塊化劃分,能夠將每個項目分為多個模塊方便用例管理;通過協議模板實現接口測試的協議模板管理;用例集合用于將多個用例進行組合使其成為一個完整的案例,可進行測試用例的復用;公共參數用于用管理所有項目或對應項目中隨時可調用的固定值,提升腳本維護效率。
(3)測試執行:任務調度提供調度設置、查詢、修改、刪除和執行功能;任務執行提供查看自動化調度執行結果的查看和管理;用例明細提供單條自動化調度執行結果明細和調試,用于查看單個任務執行詳細結果、執行步驟并進行失敗用例的調試,方便自動化測試人員定位執行中遇到錯誤并進行調試。
(4)質量管理:版本管理提供測試版本的登記;版本看板提供版本查詢及視圖功能,用于查看各個版本中用例執行統計的執行情況,并可自動生成測試報告。
(5)監控管理:定時任務監控用于查看各個調度的定時任務配置情況,方便系統管理員對發生錯誤的定時任務查看日志,快速定位問題;服務監控方便系統管理員查看自動化測試平臺服務器運行狀態,方便服務器的管理。
在進行自動化測試平臺的整體設計時,充分考慮被測系統以及平臺使用者的便捷性,采用前后端分離的總體架構,考慮到平臺的可擴展性和可維護性,主要包括以下幾個方面:
(1)采用Spring boot 框架嵌入式Tomcat,結合測試過程與各過程中的操作環節,基于Selenium 基礎工具的基本原理,進行測試過程的自動化設計,并實現自動化測試過程中腳本編寫、腳本執行的過程[3]。
(2)采用分層自動化框架的做法,每層之間都是獨立的,互不影響,又可以互相靈活組裝后,形成一個新的測試流程或理測試場景。
(3)采用成熟的Mysql 作為底層數據庫,實現數據的存取及其數據管理。
自動化測試平臺采用B/S 架構,前端基于HTML5 技術開發,主要包括數據層、服務層和展示曾三個層次,詳見圖 2 自動化測試平臺應用架構圖。
數據層:包含兩類數據,一類數據來源于不同的被測系統;另一類數據來源于測試腳本形成與測試腳本執行過程中的輸入、輸出數據。
服務層:包括服務端與客戶端兩部分,服務端構建平臺應用所需的服務,主要包括系統管理、測試管理、調度管理、監控管理等;客戶端實現用例設計、用例集設計、測試計劃生成、定時任務制定、調度任務設定、執行機分配、測試報告生成與展現等。
展現層:提供系統的基本功能,直觀展現客戶端與服務端的全部功能,以及各看板與視圖結果。
重點包括:個人看板、版本看板、版本報告以及支持客戶端的多類操作。
自動化測試平臺的實現關鍵在于Web-UI 測試、接口測試領域的流程與測試用例的快速生成。在明確測試流程、被測應用架構、數據流向和部署架構等信息后,規劃出測試流程中需要自動化處理的內容與節點,通過利用開源基礎組件,實現Web-UI 測試自動化[4]和接口測試自動化。
自動化測試平臺支持通過界面化操作組裝形成測試用例,將測試用例的組成要素進行拆分,通過界面化展現與元素預設的功能,實現無需編碼即可形成自動化測試用例的效果。將用例拆分為步驟、包|定位路徑、方法|操作、參數、步驟動作、預期結果。分別針對Web-UI、接口不同類型,將常用的方法、步驟動作作為選項,通過使用者輸入或者選擇預設信息,后臺自動拼裝成可執行腳本,并將不同步驟的順序調整,增加步驟封裝為功能菜單,降低了使用者的編碼能力,使得自動化測試的使用面可以擴大。
結合保險核心業務系統模塊功能多將用例進行模塊化拆分,降低用例的粒度,使得用例的可維護性增強。鑒于保險核心相關系統,數據生命周期長的特點,通過中間變量傳參,實現系統內,系統間的傳參,保證測試場景中數據的可用性與一致性。用例分層模型示意圖如圖3 所示。
用例分層設計即減少了用例設計期間調試的工作量,也減少了腳本維護的工作量。當被測系統頁面要素或者功能發生變化,只需要更新與維護對應功能模塊的用例,與其所關聯用例自動更新。
用例的生成方式有兩種模式,一種是手工通過界面操作,自然錄入生成,另一種是通過借助第三方插件,在操作被測系統的同時,將頁面要素的定位信息、頁面要素的基本信息抓取出來,通過自動化測試平臺接口自動寫入用例步驟的對應字段中,當錄制結束后,可以生成的基本信息中調試與增加參數化等操作,使得用例生成更便捷,其邏輯示意圖如圖4 所示。
通過建設自動化測試平臺,可在有限時間內提升測試的覆蓋面,使得人力從相對重復的場景測試中脫離出來,將工作重心著力于版本的個性化需求測試中;同時,通過自動化測試平臺,有利于測試資產的復用與積累。
分析某次模擬封板測試結果可以看出,在同等發版周期不變的情況下,同等人力投入,測試范圍綜合擴大6 倍以上,而隨著自動化測試用例的逐步完善與追加,范圍可繼續擴大,相對執行效率會得到有效提升。
隨著自動化測試工具的應用,軟件測試工作的測試時效和測試質量得到有效提高,也提升了整體的生產效能。下一步,我們將通過分析保險行業核心軟件的特性,以及常用第三方接口,進一步擴大自動化測試的范圍,提升自動化測試平臺的應用深度,將自動化測試推廣到集成測試以及開發自測環節。