隨著 5G、大數(shù)據(jù)、人工智能等技術(shù)的不斷發(fā)展,軟件在未來汽車網(wǎng)聯(lián)化、智能化、共享化和電動化的發(fā)展中占據(jù)著越來越重要的地位。車聯(lián)網(wǎng)應(yīng)用軟件(application,APP)移動端依賴于車外云服務(wù)(云端)和車載通信終端(車端)的配合,從而實現(xiàn)遠(yuǎn)程控制、車況上報、診斷、報警和尋車等功能。通過對車聯(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)和行為。目前,汽車整車廠在整車測試階 段進(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)正確性。
通過數(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 非侵入式的全鏈路的自動化測試,主要包括測試工程管理、觸屏點擊和鍵盤輸入模擬、圖像采集、測試腳本管理和圖像信息特征識別。
1.1 測試工程管理
測試工程管理支持對測試腳本的新建、保存、刪除和編輯等操作。腳本本身保存在關(guān)系型數(shù)據(jù)庫管理系統(tǒng) MySQL 中。
測試工程執(zhí)行時,模塊中的腳本解釋器會讀取測試腳本文件,解析并執(zhí)行腳本內(nèi)容。模擬測試人員的實際操作,按照腳本的要求測試各個功能模塊,并形成測試流程。
1.2 觸屏點擊和鍵盤輸入模擬
觸屏點擊和鍵盤輸入模擬功能主要模擬用戶點擊動作、輸入行為與 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)在手機指定位置中輸入文字指令等操作。
1.3 圖像采集
圖像采集功能主要是以一定頻率對 APP 所在的載體(手機或者模擬器) 的屏幕進(jìn)行錄制,并對視頻信息進(jìn)行圖像截取和存儲管理。其主要功能如下。
(1) 圖像數(shù)據(jù)抓取: 圖像的主要來源是 APP 的 UI?畫面,圖像的保存格式可由用戶配置,包括.jpg 和.bmp,調(diào)用 Android 接口命令實現(xiàn)對手機屏幕的截圖。
(2) 圖像數(shù)據(jù)存儲: ①圖像裁剪,按照指定坐標(biāo)對圖像的尺寸進(jìn)行裁剪; ②保存圖片,在測試軟件中加載和預(yù)覽圖片; ③刪除處理過程中的圖片和無效圖片。
1.4 測試腳本管理
測試人員根據(jù)需求配置測試流程,導(dǎo)入和解析測試腳本。調(diào)用圖像處理、圖像識別和輸入模擬系統(tǒng),將執(zhí)行命令發(fā)送到對應(yīng)子線程。由觸屏點擊和鍵盤輸入模擬系統(tǒng)對被測 APP 進(jìn)行輸入。測試腳本管理功能主要包括: 執(zhí)行某個腳本; 等待指定的時間; 執(zhí)行模擬動作; 解析圖像和數(shù)值; 保存結(jié)果到數(shù)據(jù)庫。
1.5 圖像信息特征識別
對車聯(lián)網(wǎng) APP 的 UI 顏色、數(shù)字、文字等信息進(jìn)行識別,主要功能如下。
①圖像比較: 在測試過程中進(jìn)行錄屏,對屏幕圖像進(jìn)行實時的周期性比較。找出有變化的圖像,標(biāo)記后存儲到本地,并設(shè)置相對于原圖像變化的閾值。
②圖像預(yù)處理: 截獲圖像在預(yù)處理后進(jìn)行 OCR,以提高識別率。
③文字識別: 能夠?qū)?APP 的 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)圖
2.1 業(yè)務(wù)層
業(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í)行腳本。
②測試腳本導(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ù)源。
2.2 核心層
核心層負(fù)責(zé)圖像信息特征識別,包括圖像信息讀取、圖像預(yù)處理、特征識別、特征比對和字庫訓(xùn)練等功能。
圖像的文字通常疊加在 APP 的 UI 背景上。圖像處理效果如圖 2 所示。

圖 2 圖像處理效果圖
現(xiàn)有 OCR 技術(shù)難以在有背景或噪聲的圖像上獲得較好的識別效果。圖像預(yù)處理使用 Python 的第三方 CV 庫函數(shù)對截取的圖像進(jìn)行預(yù)處理,例如反色處理、灰度處理、對比度增強等,從而提高對文本的識別能力。
采用谷歌公司的 Tesseract-OCR 進(jìn)行文字識別,并根據(jù)項目需求進(jìn)行自定義語言庫的設(shè)計,使 用jTessBoxEditor 工具進(jìn)行字庫訓(xùn)練。對 APP 內(nèi)的典型圖片進(jìn)行收集和保存,圖片格式為 .tif 。用jTessBoxEditor .jar 工具打開 .tif 文件,根據(jù)圖片信息修改 box 文件中識別錯誤的 Char 單元格的內(nèi)容,并生成 .tr 格式的文件。最終完成訓(xùn)練,生成自定義字庫。
2.3 數(shù)據(jù)層
數(shù)據(jù)層主要進(jìn)行數(shù)據(jù)管理,提供 Connector-ODBC調(diào)用接口,供上層程序使用數(shù)據(jù)庫。數(shù)據(jù)內(nèi)容為所有要存儲在數(shù)據(jù)庫中的內(nèi)容,包括 APP ?UI 數(shù)據(jù)、測試數(shù)據(jù)和映射坐標(biāo)數(shù)據(jù)等。
2.4 設(shè)備驅(qū)動層
設(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ù)處理,例如灰度、最小二乘和對比度等圖像處理方法,以提高識別程度。
⑤ 圖像識別線程的 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)級測試。