一种OpenHarmony操作系统的UI界面自动化测试方法

2022-06-11 07:06孟斌
电脑知识与技术 2022年13期

摘要:基于最新发布的OpenHarmony 3.1 Release版本提出了一种OpenHarmony操作系统UI界面自动化测试与控制方法,包括如何获得OpenHarmony的UI界面截图及控件对象信息,如何在OpenHarmony上模拟点击、滑动、按键等操作用于控制设備自动化测试。

关键词:OpenHarmony;UI界面自动化;控件识别;模拟输入

中图分类号:TP3            文献标识码:A

文章编号:1009-3044(2022)13-0128-04

OpenHarmony是开放原子开源基金会多个孵化、运营的开源项目之一,是面向全连接、全场景时代,基于开源方式搭建的一个智能终端设备操作系统的框架和平台[1]。2020年9月,开放原子开源基金会接受了捐赠的智能终端操作系统的基础能力及相关代码,之后开源了相关代码[2]。其中系统类型包括轻量系统(mini system)、小型系统(small system)、标准系统(standard system)[1]。轻量系统面向MCU类处理器,可应用于智能家居领域的传感器设备、连接模组、穿戴类设备等;小型系统面向内存1MiB以上应用处理器,可应用于智能家居领域的电子猫眼、IP Camera、路由器以及出行领域的行车记录仪等;标准系统面向大于128MiB的应用处理器,可应用于高端家电的显示屏、中控平板等,可以提供增强的3D GPU以及硬件合成能力,提供增强交互能力、更多控件以及动效更加丰富的图形能力。OpenHarmony的功能框架和设计是在不断演进的,随着操作系统版本的升级,其功能架构也在升级[3]。OpenHarmony的特性之一是分布式多设备协同,分布式软总线是实现分布式能力的基础,是多设备互联互通的基座,为设备间提供了统一的分布式通信能力[4]。

2022年3月发布的OpenHarmony 3.1 Release版本,标准系统版本更新内容包括了对基础能力和应用程序框架及系统应用能力和分布式能力的增强,系统应用构建包括系统桌面、系统设置、SystemUI、图库、相机、联系人、备忘录等[5];分布式能力增强包括了分布式软总线切换组网、流传输、P2P链接、蓝牙等能力,支持资源共享、硬件互助等;测试子系统的增强具备了一定的应用界面可测试能力;可以通过DevEco Studio开发OpenHarmony API为8的应用及服务。

GUI界面的自动化测试须实现程序对设备界面及返回内容的判断,以及使设备自动输入模拟代替手工点击或输入[6]。如何对OpenHarmony标准系统的操作系统及应用进行界面自动化测试?设备及应用界面的识别能力是怎样的?模拟点击、滑动、按键等操作的能力是怎样的?下面就针对OpenHarmony 3.1版本标准系统提供的相关能力做分析和介绍。

1OpenHarmony的调测设备与环境

根据OpenHarmony 3.1 Release版本发布的信息[5],提供了Hi3516、RK3568标准系统解决方案,Hi3516开发板的处理器是ARM Cortex A7@Max.900MHz;RK3568开发板的处理器是四核64位Cortex-A55,主频最高2GHz,集成G52GPU。OpenHarmony 3.1 Release版本可以烧录至这两种开发板供开发调测,开发的应用可以运行在这两种设备上,其中RK3568的性能更高一些,运行效果更好一些。本篇以Hi3516开发板为设备环境做相关说明(图1),相关内容在RK3568开发板上也适用。开发板与PC之间采用USB连接。

2 OpenHarmony的调试通道与基本调试命令

OpenHarmony的应用开发需要用到DevEco Studio,当前其配套OpenHarmony 3.1版本标准系统的应用开发的版本是DevEco Studio 3.0 Beta3 for OpenHarmony(3.0.0.900),安装完后路径下的toolchains下有一个hdc_std.exe,这是提供的Windows系统下的OpenHarmony的调测通道工具,另外也有Linux版的。在Windows下可以配置环境变量以便后续在cmd命令窗口中直接使用hdc_std命令。

2.1 hdc_std的基本命令

输入hdc_std help可以显示支持的命令及提示帮助信息,例如:hdc_std –v返回hdc版本,注意设备上的hdcd和调试PC侧的hdc_std版本要一致或兼容;hdc_std list targets列举所有连接的设备,有多台设备时用-t来区分和唯一指定某一台设备;hdc_std file send/recv是文件传输命令,加-z参数是以压缩方式传输;hdc_std install/uninstall是安装卸载App命令,加-r参数是替换已经安装存在的App,加-d参数是允许版本降级;hdc_std shell是进入shell命令,shell命令可以ls /system/bin来查看支持的详细功能和命令(图2)。

2.2 hdc_std shell命令

shell命令比较丰富,例如:bm为包管理命令(图3),bm dump –a为列举出当前设备已安装的包;aa为Abiliy元能力命令(图4),元能力子系统实现对Ability的运行和生命周期进行统一管理和调度,应用进程能支撑多个Ability,Ability具有跨应用进程间和同一进程内调用的能力,Ability管理服务统一管理和调度应用中的各Ability,并对Ability的生命周期变更进行管理,aa dump –a为列举元能力Ability清单和状态等属性信息;hidumper命令是hidumper组件提供的,为OpenHarmony开发、测试人员、IDE工具提供统一的系统信息获取工具,帮助使用者分析和定位问题[7],进入shell命令行输入hidumper –h可获取基本信息介绍,功能语法介绍(图5);hilog是HiLog组件提供的命令,是OpenHarmony日志系统,提供给系统框架、服务,以及应用打印日志,记录用户操作、系统运行状态等[8],hilog –h返回日志帮助命令。

hidumper-lc可获得系统信息分类列表;hidumper-c获取系统base、system等所有分类信息;输入hidumper-c[base system]可按base或system分类获取系统簇信息;hidumper-ls可获取系统中元能力列表;当hidumper返回信息过长耗时过久时,可结合grep缩短返回时间和找到想要的返回信息字段,比如输入hidumper -c base | grepBuildId来获取设备软件版本BuildId号。

hilog-k是kernel日志读取开关,on为打开读取kernel日志,off则关闭读取kernel日志;hilog -L为指定级别的日志(D/I/W/E/F);hilog -t为指定类型的日志(例如:-t app core init);hilog –T为指定tag。

3 OpenHarmony获取设备及应用界面对象信息

做UI界面自动化测试,首先要能感知、识别和获取被测对象界面,当前的OpenHarmony3.1版本提供了截图能力,Page类型的Ability页面提供了aa dump获取界面控件信息的能力。

3.1 获取设备界面截图

获取设备整屏截图的命令为shell snapshot_display(图6),-i参数是指如果设备有多个显示屏的情况下指定多显示屏中的哪一个,如果只有一个显示屏则不必使用-i参数;-f指定本地设备保存路径,比如/data/lastscreen.png;-w、-h可指定截屏的宽高分辨率,不带这两个参数则按设备默认当前显示分辨率来截屏,指定则按指定的新的宽高对截屏进行拉伸缩放。

指定本地路径截屏使用snapshot_display -f /data/lastscreen.png,使用hdc_std file recv /data/lastscreen.png d:\tmp\lastscreen.png则可以将截屏文件传输到调试PC的路径中,方便在调试PC上查看或判断。指定分辨率截屏举例:snapshot_display -f /data/lastscreenWH.png -w 240 -h 480,则截屏的分辨率为240 × 480像素。

3.2 获取设备界面控件对象信息

获取设备界面控件对象信息需要用到元能力Ability命令aa dump,在shell输入aa dump –a列出所有的Ability信息(图7),其中com.ohos.setting为包名,而com.ohos.setting.MainAbility为元能力Ability名,ability type为Abiliy元能力类型,这里设置界面为PAGE类,app state为#FOREGROUND表示设置界面当前为置前状态,如果为#BACKGROUND则为非置前显示状态。

然后输入aa dump -i 29-inspector-c > /data/lastinspector.txt,将页面控件信息保存到本地设备txt文本,然后用hdc_std file recv /data/lastinspector.txt d:\tmp导出到调试PC的d盘tmp文件夹下。这里-i是指定的AbilityRecord ID,由上一条aa dump –a查询获得。需要注意的是,要获得控件对象信息需要提前输入shell param set persist.ace.testmode.enabled 1打开开关,这样新绘制的Page页面才能dump出控件信息,否则dump出的控件信息inspector.txt文本只有前面aa dump的信息没有控件对象信息,该设置设备重启依然有效。控件信息包括控件的ID、text文本、坐标left、top、width、height,坐标单位是像素,设置界面控件信息示意如图8。

另外aa dump还有-element、-render方式导出,可展示控件其他的属性。

4 OpenHarmony的模擬输入能力

OpenHarmony 3.1 Release版本提供了模拟点击、滑动、按键、鼠标等操作的能力,shell输入input可查看支持的模拟输入命令(图9)。

设备触屏的模拟点击为input -T,例如:点击屏幕坐标200,200的位置为shell input -T -d 200 200 -u 200 200,其中-T表示为触摸屏模拟输入,-d模拟按下,-u模拟按下后的抬起事件;横向滑动为input -T m 400 510 80 510,其中-m表示move即模拟输入滑动,从400,510滑动到80,510,这些操作如果是设备界面上有可点击的控件、可滑动的页面,便可以触发点击和滑动事件生效。

设备模拟按键为input -K,例如:模拟按Back返回键为input -K -d 2 -u 2,模拟按电源Power键为input -K -d 18 -u 18,模拟按音量+为input -K -d 16 -u 16,模拟按音量-为input -K -d 17 -u 17,模拟输入a为input -K -d 2017 -u 2017,模拟输入b为input -K -d 2018 -u 2018,模拟按回车是input -K -d 2054 -u 2054,模拟输入Left光标左移为input -K -d 2014 -u 2014,模拟输入Right光标右移为input -K -d 2015 -u 2015,具体键盘键值与功能对应关系在源码multimodalinput_input/frameworks/proxy/events/src/key_event.cpp可以查询到[9](注意当前OpenHarmony 3.1版本并非所有模拟按键都实现了)(图10)。

设备模拟鼠标为input -M,例如:鼠标移动到坐标100,100的位置为shell input -M -m 100 100,其中-M表示为鼠标模拟输入,-m表示模拟鼠标移动,-d表示鼠标按键事件,0表示鼠标左键,1表示鼠标中键,2表示鼠标右键。

5 OpenHarmony的UI界面自动化测试方法

有了上述OpenHarmony调试通道基本命令以及获取设备截图、获取设备界面控件对象信息和模拟输入能力,便具备了在PC上搭建UI界面自动化测试的基础。可以在PC上采用脚本语言封装调试命令通道,然后利用上述获取设备截图、获取设备界面控件对象属性信息和模拟触屏点击滑动、模拟按键、模拟鼠标操作事件的可测试能力,编写UI界面自动化测试程序。并且在PC上编写程序做UI界面自动化的方式对OpenHarmony这种支持分布式多设备协同互动的系统更方便。另外还有一种方法是开发一个OpenHarmony应用,调用相关对象识别能力和模拟输入能力的API接口来驱动设备自动化测试,这种方式的好处是在安装好该测试应用后,不连接PC的情况下也能运行,需要熟悉OpenHarmony应用开发的知识。考虑到OpenHarmony的分布式多设备系统特点,在PC上调用调试通道的设备,获取和模拟输入的可测试能力命令通道做UI界面自动化测试,在分布式跨设备流转、协同场景具备一定的便利性。对于资源占用类性能测试,可以利用上述调试通道hidumper提供的资源占用的能力,对于用户体验感知角度的时延类性能测试[10],可以利用调试通道aa start、aa stop-service来辅助。

6 结束语

本文分析和介绍了OpenHarmony操作系统3.1 Release版本的可测试能力,包括OpenHarmony调试通道基本命令、截屏、获取OpenHarmony界面对象以及模拟用户进行点击、滑动、按键、鼠标操作的输入,并对如何对OpenHarmony设备进行界面自动化测试做了说明。随着OpenHarmony版本的演进,相应的可测试能力也会随之演进,可作为后续的研究方向。

参考文献:

[1] 开放原子开源基金会.OpenHarmony项目介绍[EB/OL].https://docs.openharmony.cn/about,2021.12.

[2] 欧建深.开源开放地构建OpenHarmony[J].软件和集成电路,2021(6):28-29.

[3] 李传钊.OpenHarmony的功能架构——深入浅出OpenHarmony架构、内核、驱动及应用开发全栈[M].北京:中国水利水电出版社,2021.

[4] 张荣超.鸿蒙应用开发实战[M].北京:人民邮电出版社,2021.

[5] Mamingshuai.OpenHarmony 3.1版本概述[EB/OL]. https://gitee.com/openharmony/docs/blob/OpenHarmony-3.1-Release/zh-cn/release-notes/OpenHarmony-v3.1-release.md,2022.

[6] 仲光亮.GUI界面自動化测试的核心技术[J].电脑编程技巧与维护,2013(3):65-72.

[7] 卢韬.HiDumper组件说明[EB/OL].https://gitee.com/openharmony/hiviewdfx_hidumper,2022.3.

[8] Buzhenwang.HiLog组件说明[EB/OL].https://gitee.com/openharmony/hiviewdfx_hilog,2022.3.

[9] Mayunteng.多模输入子系统[EB/OL]. https://gitee.com/openharmony/multimodalinput_input/blob/master/frameworks/proxy/events/src/key_event.cpp,2022.3.

[10] 孟斌.一种移动智能终端性能流畅评测方法[J].电子测试,2020(16):80-83,124.

【通联编辑:张薇】