【摘 要】文章首先分析安卓車機的車控功能測試的特點,繼而提出一種基于Python的自動化測試方法。該方法采用數據驅動測試的思路,通過調用Python-can庫、CANTools庫和UiAutomator2庫,實現CAN信號與車機HMI界面的交互測試。該方法靈活性高,簡單易用,可以較大地提高車機測試的效率。
【關鍵詞】自動化測試;安卓系統(tǒng);Python;車控功能;數據驅動測試
中圖分類號:U463.6 文獻標識碼:A 文章編號:1003-8639( 2024 )09-0070-02
Research on Automation Test for Vehicle-control Function of Android Head Unit
YE Zhiwei,ZHAN Denghui,WENG Huajiang
(Guangzhou Automobile Group Co.,Ltd.,Automobile Engineering Institute,Guangzhou 511434,China)
【Abstract】The characteristics of vehicle-control function test for Android head unit is analyzed firstly,then an automation test method based on Python is carried out. Data driven test methodology is adopted,and interaction test for CAN signals and HMI of head unit is achieved by utilizing Python-can library,cantools library and UiAutomator2 library. The method proposed by this article is highly flexible and easy to use,which can highly improve the test efficiency for head units.
【Key words】automation test;Android system;Python;vehicle-control function;data driven test
1 引言
當前越來越多的車控功能的開關集成在車機,使其與車輛周邊節(jié)點的交互越來越多,而這些交互目前大多數以CAN報文為載體,因此CAN信號與車機HMI之間的交互測試是信息娛樂系統(tǒng)測試的一項重要內容。目前基本采用手工點擊屏幕以及模擬發(fā)送CAN信號來測試,效率較低且較難檢出偶發(fā)問題。
由于測試安卓車機的車控功能時,既要進行HMI操作(如點擊、滑動),又要與CAN總線信號進行交互,因此單純使用CANoe等總線工具或者Appium等UI測試工具都較難滿足完整鏈路的自動化測試需求[1]。為解決該問題,本文提出一種基于Python的自動化測試方法。
2 自動化測試方案
本文提出的自動化測試方案基于數據驅動測試的思路[2],將所有待測車控軟開關的名稱、收發(fā)報文、定位方法、判斷方法等信息整理成測試數據表。然后使用Python語言編寫腳本,讀取該數據表,并且調用UiAutomator2庫(結合ADB工具)進行HMI操作[3],調用Python-can庫和CANTools庫進行CAN信號收發(fā),從而實現完整鏈路的車控功能自動化測試。圖1是該方案中自動化測試腳本框架,圖2是某款車機中部分車身附件軟開關的測試數據表。
圖1所示的自動化測試腳本框架中,DBC導入模塊用于加載DBC數據庫,便于后續(xù)解析和構造報文;測試用例導入模塊用于讀取測試數據表;用例解析模塊逐行讀取測試用例中的內容,將其轉換成腳本中的變量,以供其他模塊調用;測試執(zhí)行模塊用來設定測試參數(如循環(huán)次數、間隔時間等),調度其他模塊完成報文數據構造、收發(fā)報文、UI操作、數據獲取和結果判斷等整個測試流程;CANTools庫用于解析DBC數據庫,將數據庫中所有報文和信號都轉成腳本中的變量,構造出完整的報文數據;數據獲取模塊用來獲取總線上的數據;UiAutomator2庫實現車機UI元素的操作和分析,如點擊、滑動、長按,以及讀取控件狀態(tài)等;Python-can庫則用于調用CAN工具接口,完成總線初始化和參數設定,以及根據測試需求完成相應報文的收發(fā)。
3 自動化測試腳本開發(fā)
利用本文提出的方法開發(fā)安卓車機車控功能自動化測試腳本的一般流程如圖3所示。
首先使用UiAutoma-torviewer工具(Android SDK自帶工具)進行UI界面元素解析,獲取要測試的UI元素的控件信息和狀態(tài)信息,如resourceID、description、text、isChec-ked等[4],然后將這些信息填入到測試數據表中,以供腳本調用。
然后根據測試需求編寫各個業(yè)務模塊的代碼,實現用例讀取和解析、報文構造、發(fā)送報文、HMI操作、讀取狀態(tài)信息、結果輸出等功能。
圖4是UiAutomator2庫中常用的UI元素定位方法示例代碼。定位設備中某個元素的方法非常簡單,只要直接將控件信息作為參數傳給該設備即可,如description、text、resourceID、className這些都是可以支持的控件信息。值得注意的是,圖4中的第10行是復合定位方法,在UiAutomator2中復合定位采用的是“鏈式”方法,即將多個定位條件串聯(lián)起來,使用“.”運算符連接即可。
圖5是UiAutomator2庫中常用的UI操作方法示例代碼。如短按、長按、滑動屏幕等常規(guī)操作都有API可以直接調用。
圖6是針對“車速上鎖”軟開關的完整鏈路(模擬點擊軟開關→接收主機外發(fā)報文→模擬車身節(jié)點發(fā)出報文)的測試腳本示例代碼。通過UiAutomator2庫連接車機并模擬點擊按鈕,然后通過Python-can庫接收車機發(fā)出的報文,然后通過CANTools庫修改信號數值,并且構造報文,最后通過Python-can調用VSPY接口將報文發(fā)送到總線上。
上述代碼是針對單個車控功能的示例,實際上需要測試的不止一個車控功能,因此本文提出的測試方案采取模塊化設計腳本,將所有待測點的信息整合到一個測試數據表中,只要讀取和解析數據表,調用腳本中各業(yè)務模塊即可實現車機車控功能的完整鏈路自動化測試。
最后經過一系列的測試驗證,確認其滿足所有測試需求后即可發(fā)布腳本。
4 總結
本文對安卓車機車控功能的自動化測試進行了研究,提出了一種基于Python的自動化測試方法。該方法采用了數據驅動測試的思路,測試數據表中的每一行數據即為一條測試用例,因此主程序只要編寫一次,以后就只維護測試數據表即可更新測試用例。由于Python-can庫支持多種CAN工具的調用,而且基于Python的技術手段能更好地利用Python自身豐富的生態(tài)[5],以完成過去傳統(tǒng)技術很難完成的測試任務,例如單純使用CAPL無法實現安卓車機的HMI操作。因此本文提出的方法靈活性高,簡單易用,可以較大地提高安卓車機車控功能測試的效率,還為Python在車機其他功能的自動化測試方法也提供了重要的參考價值。
參考文獻:
[1] 翟偉良. IVI自動化測試平臺設計與開發(fā)[D]. 濟南:山東大學,2021.
[2] 夏克付,章曉勤. 基于Selenium自動化測試框架的數據驅動技術研究及應用[J]. 齊齊哈爾大學學報(自然科學版),2019 ,35(6):18-22.
[3] 徐芳. 移動應用軟件自動化測試技術初探[J]. 電子技術與軟件工程,2015(18):63-65.
[4] 黃建文. 移動應用自動化測試系統(tǒng)的研究與設計[D]. 長沙:湖南大學,2017.
[5] 華劍南. Python 語言在自動化測試系統(tǒng)中的應用[J]. 電子技術與軟件工程,2017(8):252-253.
(編輯 楊凱麟)
作者簡介 葉志偉(1988—),男,碩士,主要從事汽車電子電器系統(tǒng)測試驗證工作。