当前位置:首页 期刊杂志

基于二维运动机械臂的移动设备测试研究

时间:2024-05-04

尚政宇 钱巨 颜硕彦

摘 要:现有移动设备测试自动化框架大多是侵入性的,故而难以用于一些系统封闭的设备。非侵入式测试可以大大扩展自动测试技术的应用范围。由此,提出了一种基于二维运动机械臂的新型移动设备测试自动化技术。该技术使用可视化脚本表达测试动作,提出视觉引擎驱动二维运动机械臂自动对移动设备进行非侵入性的测试。案例研究表明该框架具有较高的测试执行准确度和速度,有良好的实用价值。

关键词:计算机视觉;自动化测试;机器人;非侵入式

Abstract:Most of the existing frameworks for automated testing of mobile devices are intrusive to the devices under test. They are difficult to be used on devices with closedsystems. Non-intrusive testing can greatly expand the application scope of automated testing techniques. This paper presents a novel approach based on two-dimensional roboticarm for mobile device testing.It uses visual scripts to express test actions. We introduce computer vision based engine to drive two-dimensional robotic arm to automaticallyperform GUI actions on mobile devices in a non-intrusive way.Case studies show that the framework has high test execution accuracy and relatively fast execution speed, which suggests the frame work might be practical for use.

Key words:computer vision; test automation; robot; non-intrusive

移动触屏设备在日常生活中被广泛使用,深入医疗、工业、金融、娱乐等各个领域。如何确保移动设备上的应用程序的质量成了摆在软件测试人员面前的一大难题[1-2],低效的测试可能会占用大量的人力物力资源,带来高昂软件研发成本。

使用测试自动化技术,可以降低测试过程对人工等资源的依赖,提升测试效率,降低测试成本。移动应用测试自动化的典型方法是将手动操作记录为测试脚本,并使用工具自动执行测试脚本。在移动设备中,现有的基于脚本的测试自动化框架大致可以分为两类[3]:一类是基于文本的框架,使用控件标签、索引、坐标等确定和执行图形用户界面(GUI)操作,例如Appium、UIAutomator和Robotium等;另一类是基于视觉的框架,通过控件图像和计算机视觉技术执行可视化GUI测试[4][5],例如Sikuli、JAutomate等。无论哪一类,对于被测设备来说,现有测试自动化技术都具有侵入性。这些技术需要在被测设备中安装或启用测试辅助工具,访问设备底层操作系统或者GUI框架的接口,才能获界面状态并触发GUI动作。对于一些系统封闭的设备,例如GoPro照相机、一些嵌入式系统装置等,现有的测试自动化技术难以应用。

非侵入式测试具有免植入工具、天然跨平台等特点。然而,实现真正非侵入式的测试自动化框架极具挑战,特别是如何不借助被测设备所在底层系统触发界面动作,采用传统技术难以实现[6]。为此,提出了一种基于二维运动机械臂的测试自动化研究技术。该技术使用基于控件图像的可视化脚本表达测试动作,提出基于模板匹配等计算机视觉算法的引擎来解析脚本,驱动主要在XY两个维度运动的机械臂对移动设备进行点击、滑动等屏幕触控操作,实现非侵入性的测试。

案例研究表明该技术具有较高的测试执行准确度。测试自动化框架可适用于任意的触屏应用程序,扩展了测试自动化技术的应用范围,为现有技术无法应用的测试场景,如对GoPro测试、游戏掌机测试等,提供了有效技术支撑,为测试自动化创造了更多的技术选择。

1 测试自动化框架总体结构

提出的测试自动化框架包括机器人装置、可视化脚本语言和脚本执行引擎等几个主要部分。

机器人装置由操作台、摄像头、XY二维运动机械臂和触屏笔组成,实景如图1所示。操作台提供平稳的操作环境,能够保持机械臂、被测设备处于同一平面内。操作台上搭建有一个支撑架,以灵活调整摄像头位置。摄像头是可变焦摄像头,在测试过程中固定焦距使用,能够在测试过程中平稳获取触屏设备屏幕的状态。XY二维运动机械臂由两个步进电机控制机械臂在操作台平面上的运动,机械臂的运动基于HBOT结构,空间利用率高,运动速度也比较快,并由一个舵机控制触屏笔的升降,实现对人类手势动作的模拟。触屏笔是主动电容触屏笔,能够在各种触控屏幕上工作,并引发屏幕的响应。

被测触屏设备可以是Android手机、iPhone、平板或者各种掌上游戏机等。在机器人装置中,摄像头和XY二维运动机械臂通过USB接口连接到测试工作站。测试过程中无需通过网络、USB接口等任何形式获取被测设备内部系统信息,实现了真正意义上的对被测设备的非侵入式测试。

脚本语言使用通过摄像头以非侵入式的方式获取的界面控件图元作为基础来表达测试动作,并提供多种脚本执行指令,脚本指令能够覆盖触屏设备的大部分控件和动作类型。测试框架设计了一个用于可视化表达测试脚本的前端界面,界面如圖2所示。在前端界面中,界面左侧是脚本的文件目录,可以选择从此界面导入已有的测试脚本,或者在工具栏新建测试脚本。界面中间是脚本编辑区,脚本语言基于Python语言,除了支持的脚本指令之外,还可以使用Python自带的各种指令编辑测试脚本,丰富脚本的功能和可用性。界面右侧是指令选择区和控件图像裁剪区,指令选择区展示了本框架支持的各种屏幕触摸指令,同时支持添加自定义快捷指令,能够通过鼠标双击将指令快速插入到编辑区中;在控件图像裁剪区中,可以调用摄像头拍摄被测设备当前的系统状态,并提供界面剪辑功能截取控件图元插入到脚本中。对测试设计人员而言,只需要了解简单的代码逻辑即可编辑合格的测试脚本,其他人员也可以很清楚的了解测试脚本的执行流程。

脚本执行引擎负责脚本指令的分析和执行,该引擎基于视觉算法分析待测屏幕状态,能够自动将高抽象层次的可视化脚本动作指令翻译为底层机器人控制指令,从而实现自动测试。

2 可视化测试脚本

测试脚本是测试自动化的基础,用于表达各种测试动作、结果校验方法等。相对于基于使用标签、索引等文本信息的测试脚本,基于控件图像的可视化脚本,对系统底层界面框架的依赖更低[7][8]。然而,现有可视化脚本依赖从底层操作获取的屏幕截图,仍也无法避免对设备的侵入性要求。

实现非侵入式的一种可行方法是从摄像头拍摄的被测设备屏幕图像中截取控件图像来表达GUI动作,构建新型的可视化测试脚本。在如图2所示的前端界面中,可以对测试脚本进行可视化编辑与展示。图2中展示了一个编辑好的测试脚本,脚本功能为判断GalaxyNote4设备中的GalaxyStore是否提示需要更新软件,若需要,则更新所有需要更新的软件。脚本中包含了click、swipe等指令,每一步的操作都可以通过指令名和参数图标清晰地展示到工具屏幕中。

测试脚本由脚本指令、资源描述两个主要部分组成,结构如图3所示。脚本指令是指可视化测试脚本中支持的所有测试脚本指令。脚本底层语言基于Python实现,所有的机器人指令动作被封装成库函数。测试人员可以直接调用封装好的库函数编写测试脚本,同时也可以结合Python语言的各种逻辑语句增加测试脚本的灵活性;整合通用的编程语言扩展其工程以及有相应的配套工具支撑等要求。

资源描述是指在测试脚本执行过程中,测试活动需要应用的图像资源,包括控件图像和键盘模型库两部分。控件图像指在测试脚本中脚本指令指定的目标控件图像,通过在摄像头拍摄的设备屏幕图像中截取获得;键盘模型库中保存有大量的软键盘模型,用于通过软键盘实现字符串的输入。

具体而言,测试脚本支持的脚本指令可分为三类。第一类是GUI动作触发指令,此类指令控制机械臂触摸設备屏幕,引起屏幕响应,包括click、drag、swipe、long_press、press_keyboard等。以在设备屏幕上点击指定控件的click指令为例,指令格式为:

其中,image是控件图像,为目标控件的屏幕截图,用jpg、png等形式的资源描述表示。region是屏幕区域,为可选参数,用于指定脚本指令的活动区域,一般应用于设备屏幕中存在多个相同控件或者控件活动区域只占据设备屏幕的一部分的情况。该指令没有返回值,但如果屏幕中不存在指定控件,则会引发程序抛出异常,结束测试并记录出现错误的指令和问题。

第二类是结果验证指令,此类指令利用图像识别技术判断是否存在某些特定控件或者执行特定的活动,包括wait、assert_exist等指令。以校验测试结果的assert_exist指令为例,指令格式为:

参数与click指令相同,返回值为布尔类型,对应在指定屏幕区域内是否存在特定状态或者控件图标。

第三类是机器人控制指令,负责控制机械臂执行一些必要的规避或者其他运动,用于调整机械臂状态,包括take_screen_photo、reset_arms、move等指令。以reset_arms指令为例,指令格式为:

可视化测试平台可以根据测试人员的测试活动设计测试脚本,在每个测试脚本中,必须调用封装的动作引擎Rcs,Rcs中包含了本框架支持的所有脚本指令。以Rcs类的实例化作为脚本执行的起点,各种脚本指令的使用构成了测试脚本的主要部分,reset_arms()指令作为脚本执行的终点,整体实现了对触屏设备的自动化测试。

3 脚本执行引擎

脚本执行引擎则通过摄像头获取被测设备系统状态,通过操作机械臂执行各种屏幕触摸动作进行测试,全程无需获取被测设备底层系统的任何信息。

脚本执行引擎分为指令分析、图像识别、坐标转换和指令传递等四个主要模块。指令分析模块负责分析测试脚本指令,获取脚本指令触摸动作和目标控件图像。图像识别模块通过USB接口从摄像头处获取当前设备屏幕图像,使用计算机视觉技术计算目标控件在图像中的像素坐标。坐标转换模块将控件像素坐标转换为机械臂在操作台上的物理世界的运动坐标。指令传递模块通过USB接口将测试脚本指令触摸动作和实际触发坐标发送给XY二维运动机械臂。

脚本执行引擎的运行流程如图4所示。

由于摄像头拍摄的图像中除了被测设备之外,还存在机械臂、电源线或者其他干扰物品,为了避免实验受到干扰以及提高实验运行速率,脚本执行引擎在试验时,会使用边缘检测算法识别被测设备所处的图像区域。

执行可视化测试脚本时,首先根据脚本指令类型控制机械臂进行相应的运动。以GUI触发动作为例:首先使用模板匹配算法识别控件图像在相机成像中的坐标[9][10]。其次,将匹配到的控件在摄像头图像中的坐标依据图像和物理世界比例尺差异,转变为物理世界中的机械臂运动坐标,将像素位移转变为机械臂在物理世界中的运动。最后,控制机械臂运动到指定位置,执行相应的屏幕触控动作,通过控制触屏笔的落笔高度和时间,实现对不同触摸动作的模拟。

在测试脚本执行过程中,XY二维运动机械臂的机械臂会在设备屏幕上执行各种触发动作。但是,机械臂本身会对设备屏幕在摄像头中的成像产生遮挡。因此,脚本执行引擎会在执行脚本指令之前,需要,将机械臂移动到最近的屏幕区域之外,避免遮挡屏幕。

4 案例研究

下面通过一个案例来介绍所提出测试自动化框架的使用方法与使用效果。

4.1 测试自动化框架使用方法

该案例中拟对GalaxyStore应用的软件更新功能进行测试,被测设备为SamsungNote4设备,系统为Android系统。测试场景先根据应用图标判断该应用是否有软件更新提示,若有,则按顺序依次打开应用界面-个人信息界面-软件更新界面,然后更新所有提示更新的应用程序。

编写好的测试脚本即为图2中所示的测试脚本,脚本共有以下几个步骤:(1)判断GalaxyStore图标是否提示有软件需要更新,若提示,执行步骤2,否则,执行步骤7;(2)打开GalaxyStore;(3)点击打开个人应用界面;(4)点击打开软件更新界面;(5)滑动屏幕,查看推荐的应用;(6)匹配屏幕中提示的软件更新图标,若匹配成功,执行步骤7,否则,执行步骤8;(7)点击进行软件更新,执行步骤6;(8)将机械臂移回运动起点,并释放机械臂和摄像头USB接口,测试结束。在此过程中,除了测试框架支持的脚本动作指令之外,还利用了python的判断语句if和循环语句while,增加了测试脚本的智能程度。运行过程设备屏幕状态以及匹配结果如图5脚本运行过程屏幕状态如图5所示。

4.2 测试自动化框架使用效果

由图5可知,在脚本运行过程中,所有的点击指令的目标控件都被脚本执行引擎精准定位,并被转换成实际坐标,机械臂也能够准确到指定位置执行触控指令,使屏幕产生预期的触摸反馈。脚本指令中存在一条滑动指令:

该指令物理意义为在设备屏幕上自右向左滑动,参数“left”表示为向左滑动,参数“[0, 0.3, 1, 0.7]”表示的屏幕区域为图5(d) 中蓝色矩形框区域,根据屏幕左侧露出的半个应用图标,可以看出应用列表发生了预期之内的滑动。

在脚本执行过程中,脚本执行引擎自动规划规避运动。执行过程中,在算法控制下设备屏幕图像均未发现机械臂遮挡拍摄的情况,脚本成功执行。

对案例测试脚本开展了十次实验,实验环境光照为普通日光灯,亮度在200lux-250lux之间,被测设备位置在多次实验之间未固定,机械臂运动速度上限为15cm/s。脚本在不同时间、不同光照等环境下重复执行了十次,均成功取得预期结果,表明测试框架在该案例中执行准确度为100%。实验中,没有使用网络或者USB数据线从被测设备内部获取任何数据。

5 结 论

提出了一个基于二维运动机械臂的测试自动化技术,该技术使用摄像头监控触屏设备屏幕状态,使用二维运动机械臂执行屏幕触摸动作,测试过程贴合人类对触屏设备的实际使用过程。在GalaxyStore案例上的实验研究表明本框架可以在移动触屏设备上执行准确的自动化测试,测试过程完全非侵入式。除了Android设备外,该项技术还可以用于Gopro、Switch游戲机等其它平台不常见或不提供接口的触屏设备,能够满足测试人员对众多触屏设备的测试需求,具有较高的使用价值。

参考文献

[1] AMALFITANO D, FASOLINO A R, TRAMONTANA P, et al. MobiGUITAR: automated model-based testing of mobile apps[J]. IEEE Software, 2014, 32(5): 53-59.

[2] GU T, SUN C, MA X, et al. Practical GUI testing of Android applications via model abstraction and refinement[C]//2019 I EEE/ACM 41st International Conference on Software Engineering (ICSE). IEEE, 2019: 269-280.

[3] KONG P, LI L, GAO J, et al. Automated testing of Android apps: a systematic literature review[J]. IEEE Transactions on Reliability, 2018, 68(1): 45-66.

[4] ALEGROTH E, NASS M, OLSSON H. JAutomate: A tool for system-and acceptance-test automation[C]//2013 IEEE Sixth International Conference on Software Testing, Verification and Validation. IEEE, 2013: 439-446.

[5] ALEGROTH E, FELDT R, RYRHOLM L. Visual gui testing in practice: challenges, problemsand limitations[J]. Empirical Software Engineering, 2015, 20(3): 694-744.

[6] MAO K, HARMAN M, JIA Y. Crowd intelligence enhances automated mobile testing[C]//2017 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, 2017: 16-26.

[7] ALEGROTH E, FELDT R. On the long-term use of visual gui testing in industrial practice: a case study[J]. Empirical Software Engineering, 2017, 22(6): 2937-2971.

[8] CHANG T H, YEH T, MILLER R C. GUI testing using computer vision[C]//Proceedings of the SIGCHI Conference on Human Factors in Computing Systems. 2010: 1535-1544.

[9] SWAROOP P, SHARMA N. An overview of various template matching methodologies in image processing[J]. International Journal of Computer Applications, 2016, 153(10): 8-14.

[10]ORON S, DEKEL T, XUE T, et al. Best-buddies similarity-robust template matching using mutual nearest neighbors[J]. IEEE transactions on pattern analysis and machine intelligence, 2017, 40(8): 1799-1813.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!