车联网APP非侵入式自动化测试的设计与实现

2022-01-18 01:34何进松
自动化仪表 2021年12期
关键词:脚本联网数据库

何进松

(上海电子信息职业技术学院通信与信息工程学院,上海 201411)

0 引言

随着5G、大数据、人工智能等技术的不断发展,软件在未来汽车网联化、智能化、共享化和电动化的发展中占据着越来越重要的地位[1]。车联网应用软件(application,APP)移动端依赖于车外云服务(云端)和车载通信终端(车端)的配合,从而实现远程控制、车况上报、诊断、报警和寻车等功能[2]。通过对车联网APP的系统级验证,可以检测从移动端、云端,到车端的全链路车联网的功能正确性和可靠性。车联网软件在用户真实场景中的测试与验证尤其重要。

车联网系统主要有三大部分组成部分,包括车端、云端和移动端。自动化测试是一种测试技术,通过分析软件产品的业务设计流程,编写和设计测试程序,并在计算机中模拟运行,自动或半自动地验证被测试软件的响应和行为[3]。目前,汽车整车厂在整车测试阶段进行的车联网APP系统测试大多采用纯手动的方式。要解决整车测试阶段测试效率过低和人因错误,车联网功能的全自动化测试解决方案有一个待解决的核心问题,即实现业务场景的模拟,并通过自动化手段触发业务,以便判断业务执行的逻辑正确性和相应功能的实现正确性[4]。

1 功能设计

通过数据线(on the go,OTG)的通信方式控制手机端APP,模拟用户输入指令,实现业务场景的模拟和软件菜单的切换。利用光学字符识别(optical character recognition,OCR)技术识别车端反馈到移动端的结果,从而实现车联网APP非侵入式的全链路的自动化测试,主要包括测试工程管理、触屏点击和键盘输入模拟、图像采集、测试脚本管理和图像信息特征识别。

1.1 测试工程管理

测试工程管理支持对测试脚本的新建、保存、删除和编辑等操作。脚本本身保存在关系型数据库管理系统MySQL中。

测试工程执行时,模块中的脚本解释器会读取测试脚本文件,解析并执行脚本内容。模拟测试人员的实际操作,按照脚本的要求测试各个功能模块,并形成测试流程。

1.2 触屏点击和键盘输入模拟

触屏点击和键盘输入模拟功能主要模拟用户点击动作、输入行为与APP系统交互的信息。 将测试系统的用户界面(user interface,UI)发出的指令转为被测APP上的移动设备的用户输入, 控制被测APP的点击和输入等操作。

①触屏点击模拟:在移动设备上插入OTG线和鼠标模拟器,用鼠标操作实现手机点击、切换APP菜单和画面等操作。

②键盘输入模拟:在移动设备上插入OTG线和键盘模拟器,实现在手机指定位置中输入文字指令等操作。

1.3 图像采集

图像采集功能主要是以一定频率对APP所在的载体(手机或者模拟器)的屏幕进行录制,并对视频信息进行图像截取和存储管理。其主要功能如下。

(1)图像数据抓取:图像的主要来源是APP 的UI画面,图像的保存格式可由用户配置,包括.jpg和.bmp,调用Android接口命令实现对手机屏幕的截图。

(2)图像数据存储:①图像裁剪,按照指定坐标对图像的尺寸进行裁剪;②保存图片,在测试软件中加载和预览图片;③删除处理过程中的图片和无效图片。

1.4 测试脚本管理

测试人员根据需求配置测试流程,导入和解析测试脚本。调用图像处理、图像识别和输入模拟系统,将执行命令发送到对应子线程。由触屏点击和键盘输入模拟系统对被测APP进行输入。测试脚本管理功能主要包括:执行某个脚本;等待指定的时间;执行模拟动作;解析图像和数值;保存结果到数据库。

1.5 图像信息特征识别

对车联网APP 的UI颜色、数字、文字等信息进行识别,主要功能如下。

①图像比较:在测试过程中进行录屏,对屏幕图像进行实时的周期性比较。找出有变化的图像,标记后存储到本地,并设置相对于原图像变化的阈值[5]。

②图像预处理:截获图像在预处理后进行OCR,以提高识别率。

③文字识别:能够对APP的UI内容(包括颜色、数字、文字等信息)进行识别,并将结果与数据库预置的期望值进行比较,以判断识别是否成功。

2 软件设计

软件设计分为4层,自上而下分别为业务层、核心层、数据层和设备驱动层。软件设计架构如图1所示。

图1 软件设计架构图

2.1 业务层

业务层服务于测试工程管理和图像采集。

2.1.1 测试工程管理

测试工程管理主要实现APP测试脚本导入、图像采集和输出、脚本执行和测试结果判定。使用Python语言进行指令解析,调用Tesseract-OCR实现对图像输出信息的判断和对测试脚本的执行控制。测试工程管理包括以下5个模块。

①测试环境配置模块:设置管理员、测试工程师和操作人员的权限:测试工程师进行测试环境配置,包括对自动测试系统的硬件设备进行配置和选择;操作人员负责选择和执行脚本[6]。

②测试脚本导入和解析模块:编辑车联网APP系统测试脚本,将其导入数据库的数据表格中,并转换为自动测试软件可以解析的测试脚本。

③测试管理执行模块:根据APP的系统测试需求,创建测试脚本执行序列。使用Python程序对测试脚本进行解析,驱动测试脚本自动执行。

④测试数据收集模块:在测试过程中,根据数据收集要求,对测试数据进行自动化收集,并保存到数据库中。

⑤测试结果判定模块:在测试脚本执行过程中收集实际输出,并与数据库中设定的预期输出进行比较,判断结果是否正确。

2.1.2 图像采集

图像采集包括两个模块:图像数据抓取模块和图像数据存储模块。

利用Android内置的应用程序接口(application programming interface,API)调用后台的服务进行录制和截图,实现图像抓取和存取管理,为图像信息识别提供数据源。

2.2 核心层

核心层负责图像信息特征识别,包括图像信息读取、图像预处理、特征识别、特征比对和字库训练等功能。

图像的文字通常叠加在APP的UI背景上。图像处理效果如图2所示。

图2 图像处理效果图

现有OCR技术难以在有背景或噪声的图像上获得较好的识别效果[7]。图像预处理使用Python的第三方CV库函数[8]对截取的图像进行预处理,例如反色处理、灰度处理、对比度增强等,从而提高对文本的识别能力。

采用谷歌公司的Tesseract-OCR进行文字识别,并根据项目需求进行自定义语言库的设计,使用jTessBoxEditor工具进行字库训练[9]。对APP内的典型图片进行收集和保存,图片格式为.tif。用jTessBoxEditor.jar工具打开.tif文件,根据图片信息修改box文件中识别错误的Char单元格的内容,并生成.tr格式的文件。最终完成训练,生成自定义字库。

2.3 数据层

数据层主要进行数据管理,提供Connector-ODBC调用接口,供上层程序使用数据库。数据内容为所有要存储在数据库中的内容[10],包括APP UI数据、测试数据和映射坐标数据等。

2.4 设备驱动层

设备驱动层是上层模块对被测APP的信息传输的驱动,驱动OTG、USB端口等硬件和安卓底层API函数对被测件的自动化操作。

3 业务流程设计

业务流程如下所述。

①测试环境配置,根据被测车联网APP相关规程或文档,配置硬件和协议参数。

②测试执行时,通过调用鼠标事件坐标映射表,进行测试脚本的解析,实现自动测试。测试过程包括图像获取和存储、图像处理、图像识别、触屏和键盘执行,预期输出比对。

③测试数据收集。将调用的子系统函数的执行结果,即测试结果存储在MySQL数据库中。

④MySQL数据存储系统根据MySQL数据库存储的测试数据,进行数据分析,包括测试结果判断和统计分析,并支持导出测试报表。

车联网APP自动化测试平台软件的业务流程设计如图3所示。

图3 业务流程设计图

4 测试实现

根据业务流程编制测试脚本,实现车联网APP系统级的自动测试流程。

①根据操作者选择的测试脚本,启动软件测试。本测试选用某主流品牌手机,分辨率为1 080×2 400。

②根据设定的测试顺序,测试软件执行触摸点击模拟动作,切换到APP UI页面。点击APP内的功能菜单按钮,执行远程开启车辆门锁,同时启动手机录屏。

③对录制的视频进行1帧/秒的截图,与基准图标进行对比,捕捉到返回事件时的截图,并按照数据库内的坐标映射表截取待识别的区域。

④图像识别系统对图像进行预处理,例如灰度、最小二乘和对比度等图像处理方法,以提高识别程度[11]。

⑤图像识别线程的Python程序调用底层的Tesseract语言库进行文字识别,并与预期值进行比较,判断识别是否成功。生成测试报表并上传到MySQL数据库。

5 结论

本设计方法面向车联网APP系统层测试,采用非侵入式自动测试机制,通过设计仿真移动端—云端—车端的外部交互环境,驱动OTG、USB端口等硬件和安卓底层API函数对被测软件的自动化操作。本设计方法利用图像处理和OCR技术结合的方式实现了自动识别,最终完成了车联网APP的非侵入式的自动化测试,提高了车联网APP系统级测试的自动化水平和效率。本设计方法不依赖被测对象的操作系统,无需APP的源码,可模拟人工操作进行自动化测试,也可应用于工控领域人机交互界面的系统级测试。

猜你喜欢
脚本联网数据库
酒驾
“身联网”等五则
《物联网技术》简介
安奇奇与小cool 龙(第二回)
抢占物联网
快乐假期
小编的新年愿望
数据库
数据库
数据库