李丹霞 劉舒婷 周濤 董欣
(中移信息技術有限公司,廣東 深圳 518048)
區(qū)塊鏈以其去中心化、傳遞信任的特性和能力,將作為最底層的通信協(xié)議撐起未來的網(wǎng)絡通信,為下一代網(wǎng)絡提供可信環(huán)境和價值互聯(lián),區(qū)塊鏈平臺與技術開發(fā)服務是上層應用的重要支撐。各大互聯(lián)網(wǎng)、云服務、電信運營商紛紛布局BaaS服務,中國移動也布局建設了自己的區(qū)塊鏈服務(China Mobile Blockchain as a Service,CMBaaS)平臺,希望為用戶提供可信、可靠、高效的區(qū)塊鏈服務,并提供統(tǒng)一區(qū)塊鏈管理平臺門戶,實現(xiàn)從平臺用戶、租戶、智能合約管理、權限管理、多鏈管理、鏈賬戶管理、瀏覽器等鏈外、鏈內的可視化管理。為滿足靈活管控、自動伸縮、高效協(xié)同,整個開發(fā)架構采用敏捷構建的開發(fā)模式,需求版本迭代周期大大縮短,在有限的時間和人力資源下,手工測試,很難做到對每個迭代周期功能進行全量回歸驗證,只能抽取影響范圍內的核心場景進行回歸驗證,存在一定的漏測風險,且考慮到不同引擎引入的適配、不同用途鏈的重復部署,為確保功能一致性和正確性,功能全量回歸頻率增多,結合手工測試流程對接口測試場景進行梳理和分析,處理邏輯類似,耗時較多的工作集中在接口模擬數(shù)據(jù)構造、測試結果核查上。若能開發(fā)一種接口自動化測試框架,實現(xiàn)接口測試數(shù)據(jù)的快速構造和測試結果自動輸出,將大大提高測試效率,滿足敏捷構建要求。
基于此,本文設計開發(fā)了IATest(InterfaceAutoTest)接口自動化測試框架,實現(xiàn)接口模板數(shù)據(jù)解析、測試數(shù)據(jù)批量生成、測試結果自動核查和統(tǒng)計分析等功能,且各功能采用解耦設計,根據(jù)用戶需要,可實現(xiàn)測試數(shù)據(jù)構造、用例執(zhí)行等某一個測試階段自動化,也支持測試全流程的自動化,使用靈活易用,復用性高,滿足了各類接口測試自動化的需要。
該測試框架主要基于python3+request進行開發(fā),主要分為三層結構,即基礎配置層、業(yè)務數(shù)據(jù)層、可視化用戶層。針對區(qū)塊鏈服務平臺測試特點,為兼容需要頻繁更替測試數(shù)據(jù)和可復用相同測試數(shù)據(jù)的測試場景,把測試數(shù)據(jù)構造和測試用例設計過程進行了解耦設計,應用更加靈活高效,既支持新功能模塊或需頻繁更替測試數(shù)據(jù)場景用例,又支持老功能回歸歷史測試數(shù)據(jù)的直接引入,滿足用戶不同自動化場景使用需求。同時設計了自己的測試數(shù)據(jù)和測試用例模板,可以快速適配到其他業(yè)務系統(tǒng)接口測試中,該框架對代碼進行了封裝,用戶無需關注底層代碼實現(xiàn),只需要關注測試用例和測試數(shù)據(jù)設計即可實現(xiàn)自動化,主要框架結如圖1所示。
圖1 IATest框架分層結構圖
IATest自動化測試框主要功能模塊包含:接口參數(shù)解析、測試數(shù)據(jù)模板生成、測試數(shù)據(jù)構造、測試用例解析和執(zhí)行、測試結果比對、測試報告統(tǒng)計分析、測試日志管理模塊,針對不用規(guī)范要求的接口測試,支持獨立開發(fā)解析庫,實現(xiàn)功能快速擴展,滿足不同業(yè)務系統(tǒng)的多種類型的接口測試。
IATest框架的處理流程如圖2所示。
圖2 IAT框架處理流程圖
根據(jù)框架處理流程圖,處理流程中各功能模塊說明如下:
(1)接口參數(shù)解析:測試人員提供需要自動化測試的每個接口的請求參數(shù)樣例,IATest系統(tǒng)根據(jù)請求參數(shù)樣例,解析出包含每個請求參數(shù)的excel測試數(shù)據(jù)構造模板和默認取值。
(2)測試數(shù)據(jù)構造:測試人員根據(jù)測試用例場景,填寫接口參數(shù)解析出的excel表格,每個字段可以填寫多個取值,用分號分隔,IATest可以批量根據(jù)組合關系批量生成與自動化用例對應的測試數(shù)據(jù)。
(3)測試用例執(zhí)行:讀取配置文件獲取環(huán)境部署、測試賬號、密碼加密公鑰等信息,并讀取測試用例文件,根據(jù)是否自動化標識字段,逐行遍歷測試用例并進行測試數(shù)據(jù)關聯(lián)和自動化執(zhí)行。
(4)測試結果記錄:每條用例執(zhí)行完成后,根據(jù)數(shù)據(jù)比對結果,回填測試結果為fail或success到測試用例對應“比對結果”列,并把實際執(zhí)行結果也回填到“實際結果”列,同時會把“此次運行”列內容由“是”修改為“已運行”,并另存為帶時間戳的測試結果記錄文件,確保每輪執(zhí)行結果的獨立性。
(5)測試數(shù)據(jù)統(tǒng)計分析:當每個接口自動化測試用例運行完成后,從自動化率、自動化通過率、失敗率等維度對自動化測試執(zhí)行結果進行統(tǒng)計分析,并輸出統(tǒng)計分析圖表。
(6)測試結果比對:對每條自動化測試用例的實際執(zhí)行結果和預期結果進行一一比對,獲取最終自動化測試結果。
(7)執(zhí)行日志管理:在測試用例執(zhí)行過程中,每執(zhí)行一個場景用例,日志關聯(lián)模塊打印該用例執(zhí)行相關的URL、請求參數(shù)、執(zhí)行結果等信息,方便問題定位。
為滿足不同場景的應用需求,測試數(shù)據(jù)和測試用例進行了解耦設計,用戶可以快速進行測試數(shù)據(jù)構造后進行自動化執(zhí)行,也可以手工完成測試數(shù)據(jù)的準備后直接進行測試用例的執(zhí)行,靈活便捷。
測試人員提供被測系統(tǒng)的接口參數(shù)模板后,IATest系統(tǒng)解析出該接口對應的測試數(shù)據(jù)快速構造模板,見表1,包含參數(shù)名、參數(shù)值(默認)、控制變量值(支持一對多)、用例名稱4列內容,其中C列和D內容默認為空,用戶可以根據(jù)要構造的測試場景自行填寫,然后進行批量測試數(shù)據(jù)的生成。
表1 測試數(shù)據(jù)構造模板
因區(qū)塊鏈服務平臺接口設計特點,很多接口請求URL中包含鏈相關的參數(shù)信息,為滿足支撐需要特設計了針對該類接口的測試用例模板,見表2,包含“此次運行*”“用例名稱*”“發(fā)送地址*”“請求方式*”“請求參數(shù)格式”“比對結果”“實際結果”,其中A-D列為用戶必填列,E列為選填列,默認為json格式,如果存在其他格式的請求,需要用戶填寫,F(xiàn)和G列為測試完成后結果回填列,A列為測試完成后值修改列。
表2 測試用例模板
規(guī)范化的用例模板設計,降低了對用戶的使用門檻,用戶只需要了解被測系統(tǒng)接口規(guī)范信息接口快速實施自動化。同時在設計自動化用例模板時,為保持和而不同,兼容不同測試用例,框架代碼設計實現(xiàn)時采用用例表頭列名進行遍歷定位,用戶使用的用例模板只需要包含測試用例模板的相關列內容,不受表頭列位置影響,都可兼容讀取執(zhí)行,降低用戶同時維護手工和自動化測試用例兩套用例的困擾。
為提升用戶操作便利性,實現(xiàn)了可視化運行界面,見圖3,可以在該界面實現(xiàn)接口模板和測試用例模板下載、測試數(shù)據(jù)和測試用例、新增接口參數(shù)模板上傳、測試數(shù)據(jù)構造、測試執(zhí)行等操作。
圖3 可視化界面
目前,運用IATest自動化測試系統(tǒng)框架,已實現(xiàn)了區(qū)塊鏈服務平臺多接口的自動化測試功能。實現(xiàn)了559個場景的自動化,該自動化測試框架提供了可視化執(zhí)行界面和后臺執(zhí)行2種方式,可滿足實時在線和無人值守模式運行,平均在1分鐘內執(zhí)行完成需要1人日手動執(zhí)行用例數(shù)量,并能根據(jù)測試執(zhí)行結果數(shù)據(jù),生成統(tǒng)計圖表,將測試結果和統(tǒng)計分析圖表填寫到測試用例文件中。相比人工測試和結果比對,大大提高了執(zhí)行效率。
IATest框架針對手工測試過程中測試數(shù)據(jù)構造和測試結果比對等環(huán)節(jié)耗時多、易出錯問題進行設計,有效節(jié)省了人力成本,減少了人工失誤率,最終滿足敏捷項目構建需要。通過測試數(shù)據(jù)和測試用例解耦設計,大大增加了應用的范圍和靈活性,在區(qū)塊鏈服務平臺接口測試中得到了很好的應用。IATest通用性強,支持快速擴展,其它新增系統(tǒng)只需要提供接口參數(shù)模板或者符合要求的測試數(shù)據(jù)和用例,即可快速實現(xiàn)測試數(shù)據(jù)批量自動構造或者測試自動化執(zhí)行。主框架提供的功能,用戶可以根據(jù)測試場景需要,自主選擇使用全流程或者某一個階段流程的自動化。
總之,基于python3+request技術的IATest框架,提出了一種支持階段或全流程的自動化測試框架,并在區(qū)塊鏈服務平臺后臺接口測試中得到很好的應用,給后臺接口自動化測試提供了一種新思路。