何進松
(上海電子信息職業技術學院通信與信息工程學院,上海 201411)
隨著5G、大數據、人工智能等技術的不斷發展,軟件在未來汽車網聯化、智能化、共享化和電動化的發展中占據著越來越重要的地位[1]。車聯網應用軟件(application,APP)移動端依賴于車外云服務(云端)和車載通信終端(車端)的配合,從而實現遠程控制、車況上報、診斷、報警和尋車等功能[2]。通過對車聯網APP的系統級驗證,可以檢測從移動端、云端,到車端的全鏈路車聯網的功能正確性和可靠性。車聯網軟件在用戶真實場景中的測試與驗證尤其重要。
車聯網系統主要有三大部分組成部分,包括車端、云端和移動端。自動化測試是一種測試技術,通過分析軟件產品的業務設計流程,編寫和設計測試程序,并在計算機中模擬運行,自動或半自動地驗證被測試軟件的響應和行為[3]。目前,汽車整車廠在整車測試階段進行的車聯網APP系統測試大多采用純手動的方式。要解決整車測試階段測試效率過低和人因錯誤,車聯網功能的全自動化測試解決方案有一個待解決的核心問題,即實現業務場景的模擬,并通過自動化手段觸發業務,以便判斷業務執行的邏輯正確性和相應功能的實現正確性[4]。
通過數據線(on the go,OTG)的通信方式控制手機端APP,模擬用戶輸入指令,實現業務場景的模擬和軟件菜單的切換。利用光學字符識別(optical character recognition,OCR)技術識別車端反饋到移動端的結果,從而實現車聯網APP非侵入式的全鏈路的自動化測試,主要包括測試工程管理、觸屏點擊和鍵盤輸入模擬、圖像采集、測試腳本管理和圖像信息特征識別。
測試工程管理支持對測試腳本的新建、保存、刪除和編輯等操作。腳本本身保存在關系型數據庫管理系統MySQL中。
測試工程執行時,模塊中的腳本解釋器會讀取測試腳本文件,解析并執行腳本內容。模擬測試人員的實際操作,按照腳本的要求測試各個功能模塊,并形成測試流程。
觸屏點擊和鍵盤輸入模擬功能主要模擬用戶點擊動作、輸入行為與APP系統交互的信息。 將測試系統的用戶界面(user interface,UI)發出的指令轉為被測APP上的移動設備的用戶輸入, 控制被測APP的點擊和輸入等操作。
①觸屏點擊模擬:在移動設備上插入OTG線和鼠標模擬器,用鼠標操作實現手機點擊、切換APP菜單和畫面等操作。
②鍵盤輸入模擬:在移動設備上插入OTG線和鍵盤模擬器,實現在手機指定位置中輸入文字指令等操作。
圖像采集功能主要是以一定頻率對APP所在的載體(手機或者模擬器)的屏幕進行錄制,并對視頻信息進行圖像截取和存儲管理。其主要功能如下。
(1)圖像數據抓取:圖像的主要來源是APP 的UI畫面,圖像的保存格式可由用戶配置,包括.jpg和.bmp,調用Android接口命令實現對手機屏幕的截圖。
(2)圖像數據存儲:①圖像裁剪,按照指定坐標對圖像的尺寸進行裁剪;②保存圖片,在測試軟件中加載和預覽圖片;③刪除處理過程中的圖片和無效圖片。
測試人員根據需求配置測試流程,導入和解析測試腳本。調用圖像處理、圖像識別和輸入模擬系統,將執行命令發送到對應子線程。由觸屏點擊和鍵盤輸入模擬系統對被測APP進行輸入。測試腳本管理功能主要包括:執行某個腳本;等待指定的時間;執行模擬動作;解析圖像和數值;保存結果到數據庫。
對車聯網APP 的UI顏色、數字、文字等信息進行識別,主要功能如下。
①圖像比較:在測試過程中進行錄屏,對屏幕圖像進行實時的周期性比較。找出有變化的圖像,標記后存儲到本地,并設置相對于原圖像變化的閾值[5]。
②圖像預處理:截獲圖像在預處理后進行OCR,以提高識別率。
③文字識別:能夠對APP的UI內容(包括顏色、數字、文字等信息)進行識別,并將結果與數據庫預置的期望值進行比較,以判斷識別是否成功。
軟件設計分為4層,自上而下分別為業務層、核心層、數據層和設備驅動層。軟件設計架構如圖1所示。

圖1 軟件設計架構圖
業務層服務于測試工程管理和圖像采集。
2.1.1 測試工程管理
測試工程管理主要實現APP測試腳本導入、圖像采集和輸出、腳本執行和測試結果判定。使用Python語言進行指令解析,調用Tesseract-OCR實現對圖像輸出信息的判斷和對測試腳本的執行控制。測試工程管理包括以下5個模塊。
①測試環境配置模塊:設置管理員、測試工程師和操作人員的權限:測試工程師進行測試環境配置,包括對自動測試系統的硬件設備進行配置和選擇;操作人員負責選擇和執行腳本[6]。
②測試腳本導入和解析模塊:編輯車聯網APP系統測試腳本,將其導入數據庫的數據表格中,并轉換為自動測試軟件可以解析的測試腳本。
③測試管理執行模塊:根據APP的系統測試需求,創建測試腳本執行序列。使用Python程序對測試腳本進行解析,驅動測試腳本自動執行。
④測試數據收集模塊:在測試過程中,根據數據收集要求,對測試數據進行自動化收集,并保存到數據庫中。
⑤測試結果判定模塊:在測試腳本執行過程中收集實際輸出,并與數據庫中設定的預期輸出進行比較,判斷結果是否正確。
2.1.2 圖像采集
圖像采集包括兩個模塊:圖像數據抓取模塊和圖像數據存儲模塊。
利用Android內置的應用程序接口(application programming interface,API)調用后臺的服務進行錄制和截圖,實現圖像抓取和存取管理,為圖像信息識別提供數據源。
核心層負責圖像信息特征識別,包括圖像信息讀取、圖像預處理、特征識別、特征比對和字庫訓練等功能。
圖像的文字通常疊加在APP的UI背景上。圖像處理效果如圖2所示。

圖2 圖像處理效果圖
現有OCR技術難以在有背景或噪聲的圖像上獲得較好的識別效果[7]。圖像預處理使用Python的第三方CV庫函數[8]對截取的圖像進行預處理,例如反色處理、灰度處理、對比度增強等,從而提高對文本的識別能力。
采用谷歌公司的Tesseract-OCR進行文字識別,并根據項目需求進行自定義語言庫的設計,使用jTessBoxEditor工具進行字庫訓練[9]。對APP內的典型圖片進行收集和保存,圖片格式為.tif。用jTessBoxEditor.jar工具打開.tif文件,根據圖片信息修改box文件中識別錯誤的Char單元格的內容,并生成.tr格式的文件。最終完成訓練,生成自定義字庫。
數據層主要進行數據管理,提供Connector-ODBC調用接口,供上層程序使用數據庫。數據內容為所有要存儲在數據庫中的內容[10],包括APP UI數據、測試數據和映射坐標數據等。
設備驅動層是上層模塊對被測APP的信息傳輸的驅動,驅動OTG、USB端口等硬件和安卓底層API函數對被測件的自動化操作。
業務流程如下所述。
①測試環境配置,根據被測車聯網APP相關規程或文檔,配置硬件和協議參數。
②測試執行時,通過調用鼠標事件坐標映射表,進行測試腳本的解析,實現自動測試。測試過程包括圖像獲取和存儲、圖像處理、圖像識別、觸屏和鍵盤執行,預期輸出比對。
③測試數據收集。將調用的子系統函數的執行結果,即測試結果存儲在MySQL數據庫中。
④MySQL數據存儲系統根據MySQL數據庫存儲的測試數據,進行數據分析,包括測試結果判斷和統計分析,并支持導出測試報表。
車聯網APP自動化測試平臺軟件的業務流程設計如圖3所示。

圖3 業務流程設計圖
根據業務流程編制測試腳本,實現車聯網APP系統級的自動測試流程。
①根據操作者選擇的測試腳本,啟動軟件測試。本測試選用某主流品牌手機,分辨率為1 080×2 400。
②根據設定的測試順序,測試軟件執行觸摸點擊模擬動作,切換到APP UI頁面。點擊APP內的功能菜單按鈕,執行遠程開啟車輛門鎖,同時啟動手機錄屏。
③對錄制的視頻進行1幀/秒的截圖,與基準圖標進行對比,捕捉到返回事件時的截圖,并按照數據庫內的坐標映射表截取待識別的區域。
④圖像識別系統對圖像進行預處理,例如灰度、最小二乘和對比度等圖像處理方法,以提高識別程度[11]。
⑤圖像識別線程的Python程序調用底層的Tesseract語言庫進行文字識別,并與預期值進行比較,判斷識別是否成功。生成測試報表并上傳到MySQL數據庫。
本設計方法面向車聯網APP系統層測試,采用非侵入式自動測試機制,通過設計仿真移動端—云端—車端的外部交互環境,驅動OTG、USB端口等硬件和安卓底層API函數對被測軟件的自動化操作。本設計方法利用圖像處理和OCR技術結合的方式實現了自動識別,最終完成了車聯網APP的非侵入式的自動化測試,提高了車聯網APP系統級測試的自動化水平和效率。本設計方法不依賴被測對象的操作系統,無需APP的源碼,可模擬人工操作進行自動化測試,也可應用于工控領域人機交互界面的系統級測試。