胡 剛,吳江燕,田祥貴,劉發(fā)勇
(1.盤江股份公司山腳樹煤礦,貴州 六盤水;2.貴州盤江煤電集團技術研究院有限公司,貴州 貴陽)
山腳樹煤礦位于貴州省六盤水市盤江斷江鎮(zhèn)中部,礦區(qū)歷史輸電線路巡檢工作主要包含接地電阻監(jiān)測、桿塔傾斜監(jiān)測、導線接頭測溫、樹木生長監(jiān)測、桿塔周邊環(huán)境監(jiān)測等,目前巡檢運維工作主要依靠人工現(xiàn)場巡檢,因此需要耗費大量人力物力,而且無法獲取桿塔和線路的實時數(shù)據(jù)。為了解決目前輸電線路巡檢需要依靠人工巡檢的問題,礦區(qū)新建輸電線路安裝在線監(jiān)測裝置30 套、輸電線路智能在線監(jiān)測系統(tǒng)1套。
輸電線路運行狀態(tài)的實時反饋、系統(tǒng)的高質量運行,對輸電線路智能在線監(jiān)測系統(tǒng)有較高質量的要求[1]。軟件系統(tǒng)自身的特點決定了其從產(chǎn)品的設計到開發(fā)都具有諸多的不確定性,而且也成為了制約軟件質量的一個重要威脅,因此,在軟件測試期間對其中存在的不確定性進行預判,合理分析其中可能存在的風險,并制定相應的風險管控措施,就成為了一項極為關鍵性的工作關系到軟件后期的穩(wěn)定運行[2]。文本闡述了一種基于關鍵字驅動的自動化測試方法,用于保證輸電線路智能在線監(jiān)測系統(tǒng)的質量。
關鍵字驅動的自動化測試框架是對數(shù)據(jù)驅動測試框架的擴展,主要思想是:界面元素名與測試內部對象名的分離;測試描述與具體實現(xiàn)細節(jié)的分離;腳本與數(shù)據(jù)的分離[3]。三個分離之間相互獨立,極大減少相互之間的影響,這種測試框架與傳統(tǒng)自動化測試框架相比,實現(xiàn)了測試數(shù)據(jù)與測試邏輯的分離,極大的提高了測試腳本的復用性和維護性,使得軟件系統(tǒng)質量得到保證的同時降低質量保證所需要的人力物力,將測試人員從重復的測試勞動中解放出來,去關注更高效、精準的測試。
山腳樹煤礦現(xiàn)有輸電線路也存在煤礦傳統(tǒng)架設輸電線路的難點,為了解決這些難點,新建輸電線路安裝了傳統(tǒng)輸電線路不具備的監(jiān)測裝置。礦區(qū)新建大營輸電線路起始于大營110KV 變電所,止于山腳樹35KV 變電所,采用鐵塔單回架設,桿塔85 基。線路全線位于貴州省盤州市盤關鎮(zhèn)、柏果鎮(zhèn)、雞場坪鎮(zhèn)境內。為搭建在線監(jiān)測系統(tǒng)整條線路安裝了在線監(jiān)測裝置30 套,其中包含設備有:輸電線路鐵塔智能在線監(jiān)測裝置、接地電阻監(jiān)測裝置、桿塔傾斜裝置等。通過現(xiàn)場桿塔監(jiān)測裝置收集到輸電線路實際運行情況,通過無線傳輸將收集到的數(shù)據(jù)反饋到后臺在線監(jiān)測平臺,通過平臺處理轉換后顯示到可視化界面,為輸電線路運行提供實時的監(jiān)測數(shù)據(jù)。
輸電線路在線監(jiān)測系統(tǒng)由兩部分組成,分別是數(shù)據(jù)采集前端(太陽能供電系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、通訊系統(tǒng)等)和后端分析處理系統(tǒng)組成[4]。采集前端是高性能的數(shù)據(jù)采集主機,其主供電源為太陽能板。通過預先設定的程序定時對周圍的各種數(shù)據(jù),前臺系統(tǒng)對所收集數(shù)據(jù)進行處理后,通過無線傳輸方式可以及時傳輸至后臺控制中心[5]。后端分析處理系統(tǒng)可以對所收集的相關數(shù)據(jù)進行分析,根據(jù)分析結果有針對性地對相關桿塔采取防范措施,后端數(shù)據(jù)分析處理系統(tǒng)主要是通過軟件開發(fā)工具,將前端所接收數(shù)據(jù),通過分析處理,在可視化頁面展示出來。后臺系統(tǒng)實現(xiàn)架構如圖1所示。
圖1 后臺實現(xiàn)架構
輸電線路監(jiān)測平臺采用OpenLayers+GeoServer 的架構,前端使用html、js 、css、Vue,后端使用Java 語言,SpringMVC+Mybatis SpringBoot,數(shù)據(jù)庫使用Mysql,報表統(tǒng)計相關功能使用Echarts 插件,最終實現(xiàn)輸電線路在線監(jiān)測平臺。
軟件質量是軟件特性的綜合,指軟件滿足規(guī)定或潛在用戶需求的能力[6]。軟件測試是提升軟件產(chǎn)品質量的重要手段,通過相應測試技術、方法的運用來發(fā)現(xiàn)軟件產(chǎn)品設計、開發(fā)過程中的潛在性問題,從而起到為軟件產(chǎn)品后期的市場化推廣、應用排除安全隱患的作用。
質量控制的重要前提就是保證操作的整個流程的真實性與完整性,只有按照正確的操作方法進行軟件測試,軟件質量保證的正確性才能夠得到保障[7]。軟件質量保證的前提是測試對象、測試環(huán)境、測試方法已經(jīng)明確,制定測試計劃及測試執(zhí)行流程后嚴格按照制定文件和相關標準執(zhí)行測試。
當前測試執(zhí)行以手工執(zhí)行和自動化執(zhí)行為主流,在冒煙測試階段及回歸測試階段一般以自動化測試為主。本文介紹了一種以關鍵字為驅動的自動化測試方法,通過該方法的實施,可以替代一部分人工測試,降低測試的時間成本和人力成本,同時,通過每日自動執(zhí)行自動化測試,可以極大保證系統(tǒng)每日正常運行,并且在系統(tǒng)發(fā)生故障時能夠及時通知項目干系人,在最短時間內做出應對。
在傳統(tǒng)的自動化測試框架中,大多數(shù)采用直接定位到頁面元素,對頁面元素進行操作,從而實現(xiàn)自動化測試的目標,在測試開始之后需要先等待測試對象的出現(xiàn),在測試對象出現(xiàn)后獲取到測試對象,然后對測試對象進行操作,最后完成測試操作。
傳統(tǒng)自動化測試框架中測試邏輯、測試元素、測試數(shù)據(jù)不能做分離處理,這種測試框架的短板是:當頁面元素、測試數(shù)據(jù)或測試邏輯發(fā)生變化時,需要重新維護腳本[8]。在實際項目過程中,因為需求變更或產(chǎn)品升級導致的系統(tǒng)元素變化或測試邏輯發(fā)生變化是頻繁的,而每一次的變更都需要重新對測試腳本進行維護,導致自動化測試日常腳本維護工作量急劇增加,同時也加大了測試腳本維護困難程度。
關鍵字驅動測試框架為了解決傳統(tǒng)測試框架存在問題提出了三個思想:一是測試元素命名與自動化測試定義對象名分離,二是將測試邏輯中的測試動作與系統(tǒng)功能實現(xiàn)細節(jié)分離,三是測試腳本與測試數(shù)據(jù)分離[9]。采用三分離的機制,可以在自動化測試過程中能夠極大提升測試腳本可維護性,降低因為系統(tǒng)元素和邏輯變化對測試執(zhí)行的影響。
框架分為四層:工具層、服務層、邏輯層和場景層,其中工具層主要封裝了測試中需要調用的工具類方法、配置文件、日志文件和失敗用例截圖;服務層主要封裝了測試系統(tǒng)的頁面元素和操作步驟;邏輯層主要封裝了系統(tǒng)各個業(yè)務對象,組成測試邏輯進行校驗;場景層則是針對各種測試場景,實現(xiàn)不同場景下的用例組合,如圖2 所示。
圖2 關鍵字驅動測試架構
2.3.1 工具層設計
(1)配置變量讀取ini_reader,封裝對ini 配置文件的讀取操作;
(2)全局變量設置global_var,定義測試過程中所需要用到的全局變量;
(3)配置郵件發(fā)送email_util,封裝測試執(zhí)行完成后測試報告自動發(fā)送到干系人;
(4)配置測試日志log_util,封裝日志輸出、級別設定功能。
2.3.2 服務層設計
(1)設計Driver_action,封裝了測試過程中需要打開、關閉瀏覽器的操作;
(2)設計take_action,封裝測試執(zhí)行失敗用例自動截圖并保存到指定文件夾;
(3)設計Page_action,封裝頁面元素操作,如:點擊、輸入、切換frame 等。
2.3.3 邏輯層設計
初始化測試_init_,完成測試執(zhí)行初始化操作;
設置cases,讀取測試用例文件,拼接測試對象、測試動作完成測試執(zhí)行并記錄執(zhí)行結果;
設置data,放置測試用例數(shù)據(jù)文件,獲取測試數(shù)據(jù);
設置main 函數(shù),指定具體模塊測試,校驗測試數(shù)據(jù)與測試模塊是否相符,執(zhí)行用例集后記錄測試結果。
2.3.4 場景層
設置main 函數(shù),作為整個測試框架的運行主入口;
設置場景smoke_test,根據(jù)冒煙測試場景將用例組合;
設置場景suite_test,執(zhí)行全量測試。
2.3.5 測試流程設計
整個測試流程以main.py 作為運行主入口,判斷當前測試場景后調用場景所關聯(lián)的測試用例,讀取測試用例對應測試數(shù)據(jù)后進入測試執(zhí)行流程,執(zhí)行過程中根據(jù)日志級別記錄執(zhí)行日志,測試執(zhí)行通過則生成測試報告并發(fā)送郵件,測試執(zhí)行失敗則再次執(zhí)行測試,若一直執(zhí)行失敗循環(huán)10 次后自動退出執(zhí)行,記錄失敗用例截圖并寫入測試報告,發(fā)送郵件到干系人郵箱,完成整個測試流程。
2.4.1 用例設計
根據(jù)輸電線路監(jiān)測系統(tǒng)需求說明書及實際系統(tǒng)實現(xiàn)情況,使用等價類分析、邊界值分析、場景法等用例設計方法,得到測試用例共計362 條,用例模塊分布如表1 所示。
表1 用例分布
2.4.2 代碼實現(xiàn)
本文測試腳本代碼編寫基于python 語言,使用selenium+webdriver 為驅動,通過腳本編寫、函數(shù)定義、代碼封裝實現(xiàn)測試用例,由于代碼量過多,在此不在贅述,僅以其中測試報告發(fā)送模塊為例展示編碼過程,部分代碼實現(xiàn)如下所示:
2.4.3 執(zhí)行結果
設置定時任務為每天凌晨一點開始執(zhí)行,所有案例執(zhí)行完成后自動發(fā)送測試報告到干系人郵箱,可以直接下載html 版本測試報告及執(zhí)行失敗的測試用例截圖。
2.4.4 測試框架實施效果評估
自動化測試框架的目的是減輕測試人員繁雜的測試工作,提升測試效率,從而達到提升軟件質量的目的。一個完成的測試過程包含了測試準備、測試執(zhí)行,在手工測試、傳統(tǒng)自動化測試和以關鍵字為驅動的測試方法中,這兩個階段耗費時間各不相同,輸電線路平臺從提測到發(fā)布中經(jīng)歷了七個版本的測試,每次版本的變動都需要大量的測試工作,表2 記錄了三種測試方法測試人員的工作量。
表2 測試工作量
從表2 可以看出系統(tǒng)完整執(zhí)行一次測試時,手工測試耗時184.2 小時,傳統(tǒng)自動化耗時743.97 小時,以關鍵字為驅動自動化測試耗時655.58 小時,設系統(tǒng)需要測試次數(shù)為n,那總測試耗時T 為:
T=nt 測試執(zhí)行時長+t 準備時長
根據(jù)公式得到測試耗時趨勢圖如圖3 所示,從圖3 可以看出,以關鍵字驅動的自動化測試耗時比傳統(tǒng)自動化測試所需耗時少;到第七次測試時,以關鍵字驅動的自動化測試框架所需耗時就比手工測試耗時少,前期耗時多的原因是以關鍵字驅動的自動化測試框架測試準備耗時較長,需要耗費大量時間對測試腳本進行編寫和調試,但是當測試準備完成后,執(zhí)行測試所耗費的時間遠遠低于手工測試所耗費的時間,因此隨著測試次數(shù)增多,手工測試耗時直線上升,一關鍵字為驅動的自動化測試耗時增加十分緩慢。
圖3 測試耗時趨勢
為了解決當前輸電線路依靠人工巡檢的難題,建立了輸電線路的在線監(jiān)測系統(tǒng),軟件系統(tǒng)的正常運行與軟件質量不可分割,軟件測試作為保證軟件系統(tǒng)質量的重要手段,需要耗費大量人力物力。本文通過自動化測試框架的建立,測試代碼的實現(xiàn),能夠將測試人員從繁雜的重復的測試工作中脫離出來,為軟件系統(tǒng)提高更高效、更精準的測試,更大提升軟件產(chǎn)品質量。通過關鍵字驅動的測試框架在一定程度上減輕了測試人員維護測試腳本的工作,但也存在腳本編寫較傳統(tǒng)自動化測試腳本更難上手,需要更多學習成本的問題,在未來的研究中,會繼續(xù)對自動化測試進行深一步的研究,以提升測試框架的適用性。