微博质量保证团队
高级测试开发工程师
目前负责微博测试中台架构设计和系统开发,保障微博、新浪新闻等产品的高可用性和稳定性,专注于测试效率的提升和方法的创新,热衷于利用AI、图像处理、智能硬件等构建新的测试手段和方法。
1. 填补鸿蒙端无开源UI自动化测试框架的空白。鸿蒙作为后起之秀,其生态不像Android和iOS经过长时间的积累后那样完善,在UI自动化测试方面,Android端有基于UiAutomator的Bootstrap.jar,iOS端有基于XCUITest的WebDriverAgent,鸿蒙还没有类似的框架;
2. 解决开发语言单一的问题。在鸿蒙生态中,UI自动化测试需要使用ArkTS语言开发,这无疑抬高了Case开发的门槛。鸿蒙端迫切需要一个测试框架能像Bootstrap.jar和WebDriverAgent那样承担起网络转发操作执行的角色,实现后鸿蒙端UI自动化测试将没有任何语言限制;
3. 解决跨应用测试的问题。在鸿蒙生态中,UI自动化测试代码属于APP代码工程的一部分,强耦合,且只能测试本应用,导致开发和维护的成本增高。鸿蒙端迫切需要一个测试框架能像Bootstrap.jar和WebDriverAgent那样根据接收到的动态指令随时启停和测试任意一个APP,彻底破除测试APP单一限制;
4. 为鸿蒙端UI测试的智能化提供眼睛和手,不管是基于传统模型还是多模态大模型的UI智能化测试,模型智能发挥类似人大脑的作用,仍然需要通过UI自动化测试框架的屏幕图像、元素树等接口“看到”设备当前的UI,再通过点击、滑动等接口操作设备UI;
5. 鸿蒙端有了自己的开源UI自动化测试框架,才能有机会融入类似Appium那样影响力大、活跃度高的UI测试开源社区,进一步扩大鸿蒙的影响力。
1. 背景
1.1 概念介绍:什么是UI测试?UI手动测试、UI自动化测试;
1.2 Android端的UI自动化测试,基于UiAutomator的Bootstrap.jar中实现了一个继承自UiAutomatorTestCase的自动化case,case里启动一个SocketServer监听4724端口用于对外界服务。APPium就是基于这个jar包的,通过adb工具push这个jar包到手机端后,通过 uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap命令启动,然后就可以通过4724端口给手机端发送截图、点击等指令了;
1.3 iOS端的UI自动化测试,基于XCUITest的WebDriverAgent是由Meta(原Facebook)推出的开源框架,现在由Appium社区维护,其本身是一个iOS端的APP工程,并且新建了一个UI Test Runner这样一个可以单独运行的专门用于UI测试的bundle实例,该实例启动一个HTTP Server,根据接收到的命令执行截图、点击等UI操作;
1.4 鸿蒙端的UI自动化测试,在鸿蒙APP的工程目录entry/src/ohosTest下,基于鸿蒙SDK提供的UiTest库,用ArkTS语言开发,UI测试APP与被测APP以两个独立APP的形式存在,独立的安装包,独立的图标,但是共用一个Bundle,使用BundleId卸载APP时,一条命令两个APP都会被卸载,二者强绑定。
2. 要解决的问题
2.1 开发成本高,开发UI自动化测试需要安装鸿蒙端APP的整套开发编译环境,包括SDK、IDE、编译工具等;
2.2 维护成本高,测试APP和被测APP分别属于QA和RD两个以上的团队,但是在同一个工程,两个APP需一起编译签名,相比QA自己维护一个独立的测试APP工程,维护成本增高;
2.3 开发语言单一,只能使用ArkTS,相比学习使用全新的ArkTS语言,如果能够使用QA常用的Python、Java等语言编写鸿蒙UI自动化测试Case,QA转向鸿蒙开展工作的成本更低,速度更快;
2.4 不支持跨应用测试,在鸿蒙的机制中,测试APP和被测APP是同一代码工程开发,且通过BundleId强绑定,当被测APP在前台,测试APP在后台时,测试APP可以正常运行,后台资源不会被系统回收,但是,如果位于系统前台的是被测APP之外的任何其他APP,位于后台的测试APP资源就会被回收,不仅无法进行后台网络通信,也无法执行UI测试操作。
3. 具体实现
3.1 环境(鸿蒙SDK、Python3)安装和HDC介绍;
3.2 架构图;
3.3 通信方案的选择:Socket、HTTP、Websocket、RPC;
3.4 Python客户端的设计亮点:同时支持链式调用和合并调用;
3.5 ArkTS服务端的实现基础————鸿蒙UiTest库介绍;
3.6 UI自动化测试Case编写样例:APP启停、单元素定位、多元素定位、点击、互动等;
3.7 数据流程图;
3.8 功能纵览:已经支持的UI操作、待实现的Ui操作、所有UI操作的实现方式(hdc shell或者UiTest库或者二者兼具);
3.9 UI操作接口性能汇总,在具体的PC配置和手机型号的环境下,各个接口的耗时统计;
3.10 应用场景:功能测试、Monkey测试、智能测试、云真机。
4. 未来规划
4.1 支持更多的功能接口;
4.2 开发更多语言的客户端:Java、Golang等;
4.3 邀请更多的同仁,共同完善该框架。
1. 本框架开源,听众可以拿来即用;
2. 启发跨语言测试工具的开发思路;
3. 启发跨应用测试工具的开发思路;
4. 在鸿蒙端凡是设计获取手机UI信息和程控操作手机的场景,比如AI智能测试、云真机等,都可以借鉴或使用本框架,少走弯路;
5. 降低了鸿蒙端UI自动化测试相关开发的门槛,有了本框架,听众可以不了解鸿蒙的开发环境,可以不会ArkTS语言,如果使用Python开发自动化,可以直接使用,如果使用其他语言开发自动化,也可以省去鸿蒙端测试APP的开发,根据通信协议使用其他语言开发一个Socket客户端即可。