2024年6月9日发(作者:)

第21期

2023年11月

无线互联科技

WirelessInternetScienceandTechnology

No.21

November,2023

AndriodIVI系统稳定性测试方案研究与自动化

测试工具设计及实现

(南京特殊教育师范学院,

江苏南京

210038)

刘 萌

摘要:基于Andriod的车载信息娱乐系统(In

-

Vehicle

Infotainment,IVI)功能日益复杂,产品安全性和稳

定性问题也随之增多。为提高产品开发及测试环节工作效率,保障产品安全性和稳定性,文章对

Andriod的IVI娱乐系统稳定性测试方案进行了深入研究,并基于Python语言及Monkey、UIAutomator2

工具设计实现了两种自动化稳定性测试工具。自动化测试是软件测试未来的发展方向,这些自动化

工具在项目实战中切实体现出人工测试无法取代的效果。

关键词:稳定性测试;Python;Monkey;UIAutomator2

中图分类号:TP311  文献标志码:A

0 引言

  随着互联网技术的飞速发展,Andriod系统在市

场终端应用中呈现迅速扩张的趋势,如今的车载娱乐

终端也大多基于Android操作系统,人机交互界面更

美观,功能也日益复杂,这也导致了系统安全性和稳

定性问题日益增多,在产品开发生命周期中不得不投

入更多的时间和人力资源到测试环节中。车载娱乐

终端产品一旦产生稳定性问题,不仅后期维护和纠正

成本极高,还会给驾驶人员带来潜在的安全威胁。为

解决上述问题,本文对Monkey及UIAutomator2两种

Andriod自动化测试工具进行了研究,制定了随机和

定制功能路径两种场景的自动化稳定性测试方案,并

设计实现了基于Python二次开发的Monkey随机场

景自动化测试工具和基于Python

+

Pytest

+

UIAutomator2的定制功能路径场景自动化测试工具。

1 基于Monkey的自动化随机测试

  Monkey是Android系统自带的一款基于命令行

的自动化测试工具,主要用于测试Android应用程序

及系统的稳定性和鲁棒性。Monkey通过向系统发送

随机事件流来模拟用户操作。Monkey简单易用,对

于发现应用程序和系统的应用程序无响应

(ApplicationNotResponse,ANR)、Crash等异常具有

显著的效果。

1.1 Monkey测试方案及工具框架设计

1.1.1 运行方式设计

  Monkey测试的运行可以分为离线和在线两种运

行模式。

在离线模式下,需要将Monkey命令参数编写成

shell脚本推送到被测设备上,本地执行。这种模式对

测试人员编程能力有一定要求,一旦测试步骤或参数

需要更改,shell脚本就需要修改,而且在测试过程中,

脚本无法实时识别到异常,不会去实时捕获日志,只

能在测试结束后人工分析Monkey测试日志,找出问

题及时间点,再去查找对应时间点的日志。如果问题

出现的时间点较早,很可能日志已被覆盖掉,导致无

法分析问题,像bugreport、dumpsys等实时性要求极高

的日志,在测试结束后再抓取基本已经失去时效。另

外,离线模式下Monkey测试本身产生的日志只能本

地化存储,占据被测系统的存储空间,从而影响被测

系统性能,干扰测试结果。

在线测试模式在测试过程中需要保持PC与被测

设备的Android调试桥(Android

DebugBridge,ADB)

连通,Python程序运行于PC上,脚本实时翻译实时下

发。本文设计的Monkey测试工具采用在线运行方

式。Monkey命令通过Python程序下发,所有Monkey

日志重定向到本地PC,避免占用被测设备的存储空

间。在测试过程中,Python程序还会另起线程实时读

取并分析Monkey日志,一旦识别到异常就立即抓取

系统全日志。这种方法一方面节省了人工分析问题

的时间,一方面确保了日志的实时性和完整性。

1.1.2 测试模式设计

  Monke测试工具提供了3种测试模式:单包、多

包组合和系统级测试模式。

单包模式只对一个应用程序进行测试,通常应用

于产品开发前期、应用程序逐个上线的阶段。不同的

功能模块用户的操作习惯不同。因此,该模式需要根

据实际操作场景设置不同的事件百分比。

多包组合模式同时针对多个应用进行并行测试,

作者简介:刘萌(1989—

),女,江苏徐州人,工程师,硕士;研究方向:自动化测试。

—60—

第21期

2023年11月无线互联科技·软件开发 

No.21

November,2023

通常会选取用户使用频率最高的几个应用随机组合,

测试过程必需涉及应用间的切换。

系统级测试模式不限定被测应用范围,对所有应

用程序和系统组件进行并行测试,实现全功能联动。

该模式主要应用于产品开发后期阶段的验收。

1.1.3 测试参数设计

  Monkey测试参数主要分为3类:基本配置参数、

事件类型参数和调试参数。

本方案中Monkey测试的目的有两种:项目早期

阶段的问题发现测试(测试过程中忽略异常继续执

行,以尽可能发现更多问题)和项目后期阶段的验收

测试(测试过程中不忽略异常,出现异常即停止执行,

并将验收结果判定为不通过)。不同测试阶段参数制

定如下。

(1)基本配置参数设计。

级别(

-

v)设为最高

-

v

-

v

-

v,以输出尽可能详细

的日志。

随机种子值(

-

s)默认为0,每轮测试更换一个随

机值,代表从不同的起点开始新一轮的测试。

动作时间间隔(

--

throttle)在产品初期阶段设为

1s,后期平台功能稳定后设定为300ms。

-

p参数后指定测试包可以实现上述3种测试

模式。每轮测试的操作次数Count参数由计划测试

时长决定,计算公式为:Count

=

测试时长(ms)/

--

throttle。

(2)事件类型参数设计。

操作事件类型的百分比值根据不同被测模块的

功能区别设定,百分比总和不超过100%。

(3)调试参数设计。

在问题发现测试阶段,将异常和超时参数设置为

ignore;在验收测试阶段,不设置此类参数。Monkey

命令示例:adb

shellmonkey

-

pxxx

-

pxxx

-

s0

--

throttle

300

--

pct-touch40

--

pct-motion20

--

pct-syskeys10

--

pct-anyevent10

--

pct-appswitch10

--

pct-flip5

--

pct-

pinchzoom5

--

ignore-crashes

--

ignore-timeouts

--

ignore-

security-exceptions

--

ignore-native-carshes

-

v

-

v

-

v5000

1.1.4 运行过程设计

  数据交换接口通常采用xml格式来实现。本工

具中用户配置接口即设计为一个xml文件,其中包含

了Monkey测试参数、测试模式、被测系统的日志路

径、检测门限值等参数。用户只需在此文件中填写参

数值即可实现不同测试方案的更改。主程序在执行

测试时会首先解析该xml文件,读取用户设置的参

数。执行流程如图1所示。

图1 Monkey测试工具执行流程

1.2 工具运行效果分析

  在产品开发前期阶段,系统还不稳定,Monkey工

具发现了较多黑屏、冻屏、死机等重大问题。在产品

开发中后期阶段,系统趋于稳定,Monkey测试可以持

续运行较长时间,更全面地发现了ANR、Crash等异

常。工具在日志抓取方面做到了实时、全面,能够满

足开发分析的需求。

—61—

第21期

2023年11月无线互联科技·软件开发 

No.21

November,2023

2 基于Python

+

Pytest

+

UIAutomator2的自动化测

试工具

  Python是全球最受欢迎的编程语言之一

[1]

,拥有

丰富的测试框架和工具

[2]

,如RobotFramework、

Pytest、Unitest等,而Pytest是最受欢迎和最具影响力

的一个。UIAutomator2是Android

UI自动化测试的开

源工具之一,可以对任意应用程序的任意一个控件属

性进行任意操作,开发者们推出的Python

-

UIAutomator2提供了Python接口,支持Python编程。

Python

-

UIAutomator2的运行主要涉及两个部分:

Python客户端和被测设备。UIAutomator2的运行环

境需要进行以下配置:(1)被测设备端打开开发者选

项,以ADB方式连接PC。在PC的CMD窗口执行

adbdevices,查看设备是否成功连接。(2)PC端安装

Python3.x;安装UIAutomator2,在CMD窗口执行pip

installUIAutomator2;安装WEditor。(3)在PC端

CMD窗口执行Python

-

UIAutomator2init,安装被测设

备端的HTTP

RPC服务apk、atx

-

agent等。这些是

UIAutomator2运行的必要工具。

2.1 基于UIAutmator2的自动化测试方案设计

  Monkey工具对于智能车载娱乐系统而言,无法

涉及与车上其他电子控制单元(Electronic

Control

Unit,ECU)的控制器局域网络(ControllerArea

Network,CAN)

[3]

通信车载协议测试。为解决这个问

题,本文引入了定制功能路径的测试方案。定制功能

路径测试具有以下优点:(1)测试步骤根据用户实际

操作设计,测试场景更接近用户行为。(2)支持个性

化定制,可以根据不同功能模块的特点,定制个性化

的测试步骤。(3)支持压力测试:可以通过设置

Pytest装饰器的参数值重复执行指定脚本,以检查系

统的稳定性。

定制功能路径测试的目的有2个:功能验证和性

能验证。前者重点关注系统在执行一般用户操作(如

点击、按键、滑动等)后的系统反应是否正确。后者主

要通过反复执行某一类型的操作,如蓝牙、Wi-Fi的开

关/断连、系统软重启、休眠/唤醒等,来检查系统功能

和状态在重复压力或长期运行下是否稳定。这种测

试对于发现系统内存泄漏以及稳健性相关的问题非

常有效。

定制功能路径测试分为常规操作类、Can信号交

互类和性能测试等场景。常规操作类测试涵盖了用

户常见的操作行为。Can信号交互类测试则关注系

统在与其他ECU通信时系统状态及反馈是否正确。

性能测试则是通过大量操作后,测量系统的关键性能

指标,如冷启动/热启动时长和开机时序等,对系统进

行全面的性能评估,以确保产品满足出厂及市场标

准。定制功能路径测试具体场景设计如下:(1)单

App全功能链路验证,主要用于验证单个应用程序的

基本功能。(2)多App全功能链路交互验证,主要用

于验证多个应用程序之间交互是否正常。(3)典型

单场景操作,如开关反复开闭、休眠唤醒等,主要用于

验证系统关键功能是否稳定。(4)性能测试,冷/热

重启、休眠唤醒等场景重复执行百遍后,验证启动时

序、统计平均开机时长。(5)场景复现,针对一些较

难复现的bug开发特定的测试脚本尝试复现,出具复

现概率报告或压力测试报告。

2.2 自动化测试工具设计

  (1)界面元素获取工具。

本文使用WEditor来定位元素,WEditor基于

Python,能提供辅助编写脚本和调试代码的功能,可

以通过浏览器轻松打开,简单易用。WEditor可方便

获取到元素的Xpath属性(Xpath是元素的绝对唯一

属性)。

(2)测试脚本工程架构。

基于UIAutmator2的自动化测试工具框架及整体

运行流程设计如图2所示。

①为测试引擎,主要完成测试报告的创

建、测试套件配置参数的获取、各种路参数径的获取、

测试命令下发等。

②Config路径下存放test_和xpath_cfg.

py。前者用于存储测试套件的配置参数,如测试环

境、用例、数据等。后者用于存储测试用例用到的参

数,如XPath值、Can信号值等。

③TestCases路径下存放所有测试脚本文件,每

个功能模块对应一个.py文件,每个测试用例对应一

个函数,用例运行策略由Pytest装饰器参数值指定。

④是一个集合了所有公共函数的Python

文件,如环境恢复、xml文件解析、用户操作、Can信号

收发、Log抓取、系统状态检查等。

⑤TestReports路径下存放测试报告,每轮测试都

会创建一个新的网页版测试报告。测试报告中可以

包含测试结果、执行时间、测试用例的通过或失败状

态等信息。

(3)Can

信号收发工具使用开发。

本文工具针对Pcan测试仪开发Python脚本,通

过对进行二次开发来实现。PCan

的原生函数有:Initialize(初始化一个PCan

设备的PCan通道)、Uninitialize(取消初始化)、

GetStatus(获取当前PCan通道的Bus状态)、Read(从

消息接收队列中读取Can消息及其时间戳)、Write

(发送Can消息)等函数,对上述源码进行Python二

次封装,编写更易于测试人员使用、更符合项目需求

的公共方法(如Send()、Receive()、Check())等,汇

集到文件,测试用例中导入PCanBasic.

py即可使用封装的函数。

—62—

第21期

2023年11月无线互联科技·软件开发 

No.21

November,2023

图2 UIAutomator2自动化测试工具框架及流程

2.3 工具运行效果分析

  在产品开发的中后期阶段,系统已逐步趋于稳

定,每次软件发布版本后使用自动化脚本即可完成大

部分基础功能验证,无需人工再次轮询测试用例,极

大地节省了人力和时间成本。此外,在压力和性能测

试方面,该工具获取的数据比手动测试更为科学准

确,帮助了产品团队迅速准确地了解产品的性能,为

产品的优化和改进提供了坚实的依据。UIAutomator2

自动化测试工具在保证产品质量、提高测试效率以及

节省时间和人力成本等方面都发挥了人工测试不可

替代的作用。

3 结语

  本文通过对智能Andriod车机系统稳定性测试方

案及Monkey和UIAutomator2自动化测试工具的研

究,设计并实现了2种自动化稳定性测试工具。这些

  

工具在实际项目中切实提高了工作效率和产品质量。

随着车联网和智能网联产品的不断发展,IVI娱乐系

统的稳定性测试将越来越受到重视,类似的自动化测

试工具将发挥更为广泛和重要的作用,对于推动车载

智能产品的发展有着重要的意义。

参考文献

[1]CHUN

核心编程[M].3版.北京:人民

邮电出版社,2016.

[2]蒲天杭.基于Python语言的仪器管理与测试系统

研究[J].中国仪器仪表,2020(2):52

-

55.

[3]江永聪.基于DBC的汽车CAN报文远程采集与

分析系统设计[J].电子技术与软件工程,2014(14):

203

-

204.

(编辑 王永超)

DesignandimplementationofstabilitytestingforAndroidIVIsystemsand

automationtestingtools

LiuMeng

NanjingNormalUniversityofSpecialEducation Nanjing210038 China

Abstract

WiththeincreasingcomplexityoffeaturesinAndroidIVIentertainmentsystems resultinginmoreandmore

rtoimprovetheefficiencyofproductdevelopmentandtesting ensure

productstabilityandperformance thisarticlestudiedAndriodIVIsystemstabilitytestingscheme designedand

implementedtwoautomationstabilitytestingtoolsbasedonPython Monkey oolshave

effectivelydemonstratedeffectsthatcannotbereplacedbymanualtestinginreal

-

worldprojects.

Keywords

stabilitytesting Python Monkey UIAutomator2

—63—