【摘 要】文章首先分析安卓车机的车控功能测试的特点,继而提出一种基于Python的自动化测试方法。该方法采用数据驱动测试的思路,通过调用Python-can库、CANTools库和UiAutomator2库,实现CAN信号与车机HMI界面的交互测试。该方法灵活性高,简单易用,可以较大地提高车机测试的效率。
【关键词】自动化测试;安卓系统;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 引言
当前越来越多的车控功能的开关集成在车机,使其与车辆周边节点的交互越来越多,而这些交互目前大多数以CAN报文为载体,因此CAN信号与车机HMI之间的交互测试是信息娱乐系统测试的一项重要内容。目前基本采用手工点击屏幕以及模拟发送CAN信号来测试,效率较低且较难检出偶发问题。
由于测试安卓车机的车控功能时,既要进行HMI操作(如点击、滑动),又要与CAN总线信号进行交互,因此单纯使用CANoe等总线工具或者Appium等UI测试工具都较难满足完整链路的自动化测试需求[1]。为解决该问题,本文提出一种基于Python的自动化测试方法。
2 自动化测试方案
本文提出的自动化测试方案基于数据驱动测试的思路[2],将所有待测车控软开关的名称、收发报文、定位方法、判断方法等信息整理成测试数据表。然后使用Python语言编写脚本,读取该数据表,并且调用UiAutomator2库(结合ADB工具)进行HMI操作[3],调用Python-can库和CANTools库进行CAN信号收发,从而实现完整链路的车控功能自动化测试。图1是该方案中自动化测试脚本框架,图2是某款车机中部分车身附件软开关的测试数据表。
图1所示的自动化测试脚本框架中,DBC导入模块用于加载DBC数据库,便于后续解析和构造报文;测试用例导入模块用于读取测试数据表;用例解析模块逐行读取测试用例中的内容,将其转换成脚本中的变量,以供其他模块调用;测试执行模块用来设定测试参数(如循环次数、间隔时间等),调度其他模块完成报文数据构造、收发报文、UI操作、数据获取和结果判断等整个测试流程;CANTools库用于解析DBC数据库,将数据库中所有报文和信号都转成脚本中的变量,构造出完整的报文数据;数据获取模块用来获取总线上的数据;UiAutomator2库实现车机UI元素的操作和分析,如点击、滑动、长按,以及读取控件状态等;Python-can库则用于调用CAN工具接口,完成总线初始化和参数设定,以及根据测试需求完成相应报文的收发。
3 自动化测试脚本开发
利用本文提出的方法开发安卓车机车控功能自动化测试脚本的一般流程如图3所示。
首先使用UiAutoma-torviewer工具(Android SDK自带工具)进行UI界面元素解析,获取要测试的UI元素的控件信息和状态信息,如resourceID、description、text、isChec-ked等[4],然后将这些信息填入到测试数据表中,以供脚本调用。
然后根据测试需求编写各个业务模块的代码,实现用例读取和解析、报文构造、发送报文、HMI操作、读取状态信息、结果输出等功能。
图4是UiAutomator2库中常用的UI元素定位方法示例代码。定位设备中某个元素的方法非常简单,只要直接将控件信息作为参数传给该设备即可,如description、text、resourceID、className这些都是可以支持的控件信息。值得注意的是,图4中的第10行是复合定位方法,在UiAutomator2中复合定位采用的是“链式”方法,即将多个定位条件串联起来,使用“.”运算符连接即可。
图5是UiAutomator2库中常用的UI操作方法示例代码。如短按、长按、滑动屏幕等常规操作都有API可以直接调用。
图6是针对“车速上锁”软开关的完整链路(模拟点击软开关→接收主机外发报文→模拟车身节点发出报文)的测试脚本示例代码。通过UiAutomator2库连接车机并模拟点击按钮,然后通过Python-can库接收车机发出的报文,然后通过CANTools库修改信号数值,并且构造报文,最后通过Python-can调用VSPY接口将报文发送到总线上。
上述代码是针对单个车控功能的示例,实际上需要测试的不止一个车控功能,因此本文提出的测试方案采取模块化设计脚本,将所有待测点的信息整合到一个测试数据表中,只要读取和解析数据表,调用脚本中各业务模块即可实现车机车控功能的完整链路自动化测试。
最后经过一系列的测试验证,确认其满足所有测试需求后即可发布脚本。
4 总结
本文对安卓车机车控功能的自动化测试进行了研究,提出了一种基于Python的自动化测试方法。该方法采用了数据驱动测试的思路,测试数据表中的每一行数据即为一条测试用例,因此主程序只要编写一次,以后就只维护测试数据表即可更新测试用例。由于Python-can库支持多种CAN工具的调用,而且基于Python的技术手段能更好地利用Python自身丰富的生态[5],以完成过去传统技术很难完成的测试任务,例如单纯使用CAPL无法实现安卓车机的HMI操作。因此本文提出的方法灵活性高,简单易用,可以较大地提高安卓车机车控功能测试的效率,还为Python在车机其他功能的自动化测试方法也提供了重要的参考价值。
参考文献:
[1] 翟伟良. IVI自动化测试平台设计与开发[D]. 济南:山东大学,2021.
[2] 夏克付,章晓勤. 基于Selenium自动化测试框架的数据驱动技术研究及应用[J]. 齐齐哈尔大学学报(自然科学版),2019 ,35(6):18-22.
[3] 徐芳. 移动应用软件自动化测试技术初探[J]. 电子技术与软件工程,2015(18):63-65.
[4] 黄建文. 移动应用自动化测试系统的研究与设计[D]. 长沙:湖南大学,2017.
[5] 华剑南. Python 语言在自动化测试系统中的应用[J]. 电子技术与软件工程,2017(8):252-253.
(编辑 杨凯麟)
作者简介 叶志伟(1988—),男,硕士,主要从事汽车电子电器系统测试验证工作。