何進(jìn)松
(上海電子信息職業(yè)技術(shù)學(xué)院通信與信息工程學(xué)院,上海 201411)
隨著5G、大數(shù)據(jù)、人工智能等技術(shù)的不斷發(fā)展,軟件在未來汽車網(wǎng)聯(lián)化、智能化、共享化和電動化的發(fā)展中占據(jù)著越來越重要的地位[1]。車聯(lián)網(wǎng)應(yīng)用軟件(application,APP)移動端依賴于車外云服務(wù)(云端)和車載通信終端(車端)的配合,從而實現(xiàn)遠(yuǎn)程控制、車況上報、診斷、報警和尋車等功能[2]。通過對車聯(lián)網(wǎng)APP的系統(tǒng)級驗證,可以檢測從移動端、云端,到車端的全鏈路車聯(lián)網(wǎng)的功能正確性和可靠性。車聯(lián)網(wǎng)軟件在用戶真實場景中的測試與驗證尤其重要。
車聯(lián)網(wǎng)系統(tǒng)主要有三大部分組成部分,包括車端、云端和移動端。自動化測試是一種測試技術(shù),通過分析軟件產(chǎn)品的業(yè)務(wù)設(shè)計流程,編寫和設(shè)計測試程序,并在計算機中模擬運行,自動或半自動地驗證被測試軟件的響應(yīng)和行為[3]。目前,汽車整車廠在整車測試階段進(jìn)行的車聯(lián)網(wǎng)APP系統(tǒng)測試大多采用純手動的方式。要解決整車測試階段測試效率過低和人因錯誤,車聯(lián)網(wǎng)功能的全自動化測試解決方案有一個待解決的核心問題,即實現(xiàn)業(yè)務(wù)場景的模擬,并通過自動化手段觸發(fā)業(yè)務(wù),以便判斷業(yè)務(wù)執(zhí)行的邏輯正確性和相應(yīng)功能的實現(xiàn)正確性[4]。
通過數(shù)據(jù)線(on the go,OTG)的通信方式控制手機端APP,模擬用戶輸入指令,實現(xiàn)業(yè)務(wù)場景的模擬和軟件菜單的切換。利用光學(xué)字符識別(optical character recognition,OCR)技術(shù)識別車端反饋到移動端的結(jié)果,從而實現(xiàn)車聯(lián)網(wǎng)APP非侵入式的全鏈路的自動化測試,主要包括測試工程管理、觸屏點擊和鍵盤輸入模擬、圖像采集、測試腳本管理和圖像信息特征識別。
測試工程管理支持對測試腳本的新建、保存、刪除和編輯等操作。腳本本身保存在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)MySQL中。
測試工程執(zhí)行時,模塊中的腳本解釋器會讀取測試腳本文件,解析并執(zhí)行腳本內(nèi)容。模擬測試人員的實際操作,按照腳本的要求測試各個功能模塊,并形成測試流程。
觸屏點擊和鍵盤輸入模擬功能主要模擬用戶點擊動作、輸入行為與APP系統(tǒng)交互的信息。 將測試系統(tǒng)的用戶界面(user interface,UI)發(fā)出的指令轉(zhuǎn)為被測APP上的移動設(shè)備的用戶輸入, 控制被測APP的點擊和輸入等操作。
①觸屏點擊模擬:在移動設(shè)備上插入OTG線和鼠標(biāo)模擬器,用鼠標(biāo)操作實現(xiàn)手機點擊、切換APP菜單和畫面等操作。
②鍵盤輸入模擬:在移動設(shè)備上插入OTG線和鍵盤模擬器,實現(xiàn)在手機指定位置中輸入文字指令等操作。
圖像采集功能主要是以一定頻率對APP所在的載體(手機或者模擬器)的屏幕進(jìn)行錄制,并對視頻信息進(jìn)行圖像截取和存儲管理。其主要功能如下。
(1)圖像數(shù)據(jù)抓?。簣D像的主要來源是APP 的UI畫面,圖像的保存格式可由用戶配置,包括.jpg和.bmp,調(diào)用Android接口命令實現(xiàn)對手機屏幕的截圖。
(2)圖像數(shù)據(jù)存儲:①圖像裁剪,按照指定坐標(biāo)對圖像的尺寸進(jìn)行裁剪;②保存圖片,在測試軟件中加載和預(yù)覽圖片;③刪除處理過程中的圖片和無效圖片。
測試人員根據(jù)需求配置測試流程,導(dǎo)入和解析測試腳本。調(diào)用圖像處理、圖像識別和輸入模擬系統(tǒng),將執(zhí)行命令發(fā)送到對應(yīng)子線程。由觸屏點擊和鍵盤輸入模擬系統(tǒng)對被測APP進(jìn)行輸入。測試腳本管理功能主要包括:執(zhí)行某個腳本;等待指定的時間;執(zhí)行模擬動作;解析圖像和數(shù)值;保存結(jié)果到數(shù)據(jù)庫。
對車聯(lián)網(wǎng)APP 的UI顏色、數(shù)字、文字等信息進(jìn)行識別,主要功能如下。
①圖像比較:在測試過程中進(jìn)行錄屏,對屏幕圖像進(jìn)行實時的周期性比較。找出有變化的圖像,標(biāo)記后存儲到本地,并設(shè)置相對于原圖像變化的閾值[5]。
②圖像預(yù)處理:截獲圖像在預(yù)處理后進(jìn)行OCR,以提高識別率。
③文字識別:能夠?qū)PP的UI內(nèi)容(包括顏色、數(shù)字、文字等信息)進(jìn)行識別,并將結(jié)果與數(shù)據(jù)庫預(yù)置的期望值進(jìn)行比較,以判斷識別是否成功。
軟件設(shè)計分為4層,自上而下分別為業(yè)務(wù)層、核心層、數(shù)據(jù)層和設(shè)備驅(qū)動層。軟件設(shè)計架構(gòu)如圖1所示。
圖1 軟件設(shè)計架構(gòu)圖
業(yè)務(wù)層服務(wù)于測試工程管理和圖像采集。
2.1.1 測試工程管理
測試工程管理主要實現(xiàn)APP測試腳本導(dǎo)入、圖像采集和輸出、腳本執(zhí)行和測試結(jié)果判定。使用Python語言進(jìn)行指令解析,調(diào)用Tesseract-OCR實現(xiàn)對圖像輸出信息的判斷和對測試腳本的執(zhí)行控制。測試工程管理包括以下5個模塊。
①測試環(huán)境配置模塊:設(shè)置管理員、測試工程師和操作人員的權(quán)限:測試工程師進(jìn)行測試環(huán)境配置,包括對自動測試系統(tǒng)的硬件設(shè)備進(jìn)行配置和選擇;操作人員負(fù)責(zé)選擇和執(zhí)行腳本[6]。
②測試腳本導(dǎo)入和解析模塊:編輯車聯(lián)網(wǎng)APP系統(tǒng)測試腳本,將其導(dǎo)入數(shù)據(jù)庫的數(shù)據(jù)表格中,并轉(zhuǎn)換為自動測試軟件可以解析的測試腳本。
③測試管理執(zhí)行模塊:根據(jù)APP的系統(tǒng)測試需求,創(chuàng)建測試腳本執(zhí)行序列。使用Python程序?qū)y試腳本進(jìn)行解析,驅(qū)動測試腳本自動執(zhí)行。
④測試數(shù)據(jù)收集模塊:在測試過程中,根據(jù)數(shù)據(jù)收集要求,對測試數(shù)據(jù)進(jìn)行自動化收集,并保存到數(shù)據(jù)庫中。
⑤測試結(jié)果判定模塊:在測試腳本執(zhí)行過程中收集實際輸出,并與數(shù)據(jù)庫中設(shè)定的預(yù)期輸出進(jìn)行比較,判斷結(jié)果是否正確。
2.1.2 圖像采集
圖像采集包括兩個模塊:圖像數(shù)據(jù)抓取模塊和圖像數(shù)據(jù)存儲模塊。
利用Android內(nèi)置的應(yīng)用程序接口(application programming interface,API)調(diào)用后臺的服務(wù)進(jìn)行錄制和截圖,實現(xiàn)圖像抓取和存取管理,為圖像信息識別提供數(shù)據(jù)源。
核心層負(fù)責(zé)圖像信息特征識別,包括圖像信息讀取、圖像預(yù)處理、特征識別、特征比對和字庫訓(xùn)練等功能。
圖像的文字通常疊加在APP的UI背景上。圖像處理效果如圖2所示。
圖2 圖像處理效果圖
現(xiàn)有OCR技術(shù)難以在有背景或噪聲的圖像上獲得較好的識別效果[7]。圖像預(yù)處理使用Python的第三方CV庫函數(shù)[8]對截取的圖像進(jìn)行預(yù)處理,例如反色處理、灰度處理、對比度增強等,從而提高對文本的識別能力。
采用谷歌公司的Tesseract-OCR進(jìn)行文字識別,并根據(jù)項目需求進(jìn)行自定義語言庫的設(shè)計,使用jTessBoxEditor工具進(jìn)行字庫訓(xùn)練[9]。對APP內(nèi)的典型圖片進(jìn)行收集和保存,圖片格式為.tif。用jTessBoxEditor.jar工具打開.tif文件,根據(jù)圖片信息修改box文件中識別錯誤的Char單元格的內(nèi)容,并生成.tr格式的文件。最終完成訓(xùn)練,生成自定義字庫。
數(shù)據(jù)層主要進(jìn)行數(shù)據(jù)管理,提供Connector-ODBC調(diào)用接口,供上層程序使用數(shù)據(jù)庫。數(shù)據(jù)內(nèi)容為所有要存儲在數(shù)據(jù)庫中的內(nèi)容[10],包括APP UI數(shù)據(jù)、測試數(shù)據(jù)和映射坐標(biāo)數(shù)據(jù)等。
設(shè)備驅(qū)動層是上層模塊對被測APP的信息傳輸?shù)尿?qū)動,驅(qū)動OTG、USB端口等硬件和安卓底層API函數(shù)對被測件的自動化操作。
業(yè)務(wù)流程如下所述。
①測試環(huán)境配置,根據(jù)被測車聯(lián)網(wǎng)APP相關(guān)規(guī)程或文檔,配置硬件和協(xié)議參數(shù)。
②測試執(zhí)行時,通過調(diào)用鼠標(biāo)事件坐標(biāo)映射表,進(jìn)行測試腳本的解析,實現(xiàn)自動測試。測試過程包括圖像獲取和存儲、圖像處理、圖像識別、觸屏和鍵盤執(zhí)行,預(yù)期輸出比對。
③測試數(shù)據(jù)收集。將調(diào)用的子系統(tǒng)函數(shù)的執(zhí)行結(jié)果,即測試結(jié)果存儲在MySQL數(shù)據(jù)庫中。
④MySQL數(shù)據(jù)存儲系統(tǒng)根據(jù)MySQL數(shù)據(jù)庫存儲的測試數(shù)據(jù),進(jìn)行數(shù)據(jù)分析,包括測試結(jié)果判斷和統(tǒng)計分析,并支持導(dǎo)出測試報表。
車聯(lián)網(wǎng)APP自動化測試平臺軟件的業(yè)務(wù)流程設(shè)計如圖3所示。
圖3 業(yè)務(wù)流程設(shè)計圖
根據(jù)業(yè)務(wù)流程編制測試腳本,實現(xiàn)車聯(lián)網(wǎng)APP系統(tǒng)級的自動測試流程。
①根據(jù)操作者選擇的測試腳本,啟動軟件測試。本測試選用某主流品牌手機,分辨率為1 080×2 400。
②根據(jù)設(shè)定的測試順序,測試軟件執(zhí)行觸摸點擊模擬動作,切換到APP UI頁面。點擊APP內(nèi)的功能菜單按鈕,執(zhí)行遠(yuǎn)程開啟車輛門鎖,同時啟動手機錄屏。
③對錄制的視頻進(jìn)行1幀/秒的截圖,與基準(zhǔn)圖標(biāo)進(jìn)行對比,捕捉到返回事件時的截圖,并按照數(shù)據(jù)庫內(nèi)的坐標(biāo)映射表截取待識別的區(qū)域。
④圖像識別系統(tǒng)對圖像進(jìn)行預(yù)處理,例如灰度、最小二乘和對比度等圖像處理方法,以提高識別程度[11]。
⑤圖像識別線程的Python程序調(diào)用底層的Tesseract語言庫進(jìn)行文字識別,并與預(yù)期值進(jìn)行比較,判斷識別是否成功。生成測試報表并上傳到MySQL數(shù)據(jù)庫。
本設(shè)計方法面向車聯(lián)網(wǎng)APP系統(tǒng)層測試,采用非侵入式自動測試機制,通過設(shè)計仿真移動端—云端—車端的外部交互環(huán)境,驅(qū)動OTG、USB端口等硬件和安卓底層API函數(shù)對被測軟件的自動化操作。本設(shè)計方法利用圖像處理和OCR技術(shù)結(jié)合的方式實現(xiàn)了自動識別,最終完成了車聯(lián)網(wǎng)APP的非侵入式的自動化測試,提高了車聯(lián)網(wǎng)APP系統(tǒng)級測試的自動化水平和效率。本設(shè)計方法不依賴被測對象的操作系統(tǒng),無需APP的源碼,可模擬人工操作進(jìn)行自動化測試,也可應(yīng)用于工控領(lǐng)域人機交互界面的系統(tǒng)級測試。