SoloPi:支付宝 Android 专项测试工具 | 开源

Ps:8 月 11 号广州,来听听它的 线下首秀,具体信息详见文末~

| 导语

近年来,随着移动互联网的蓬勃发展,移动测试技术也取得了长足的进步,从早期基于测试脚本的单机自动化,到录制回放、图像识别、云测平台等测试技术贴合实际业务需求深度应用和创新,测试效率从而一次又一次被提升。

本文主要介绍支付宝在移动端上实现的一套无线化、非侵入、免 Root 的 Android 专项测试方案 SoloPi。直接操控手机,即可实现自动化的功能、性能、兼容性、以及稳定性测试等工作。


1 移动测试 1.0 时代

移动测试 1.0 时代,也可以称之为探索期。由于厌倦了日复一日的手工操作,如何提升测试效率成为了移动测试领域最重要的课题,在此期间,除了 Monkey、UiAutomator、Instruments 等官方提供的工具,业界还涌现了一批优秀的开源自动化测试工具/框架,在自动化驱动能力的基础之上,不仅可以实现基本功能的验证,还可以结合性能采集方案、遍历算法等实现各类专项测试的自动化。在这个阶段,自动化测试的常见形态是在单机或本地少数几台 PC 上部署测试环境,再利用 Jenkins 等工具实现持续集成。

640?wx_fmt=png


2 移动测试 2.0 时代

伴随着测试技术的持续发展、又得益于 STF 的开源,业界开始出现了云测平台的概念,将真机设备、任务管理、自动化框架以及专项测试方案打包在平台中作为服务提供出去,给用户带来了一站式的测试体验。另一方面,远程调试、设备调度等技术的引入极大的提升了设备的利用率,测试人员不再需要为缺少测试设备或测试任务排队耗时而担心。对于云测平台用户而言,在此阶段常见的测试形态是:在本地 PC 上开发测试脚本,再上传至云测平台执行,最后可在平台中查看测试报告,测试流程简单且清晰。

640?wx_fmt=png


3 移动测试 2.0+

在保留了上述“云测”的玩法之外,移动测试 2.0+ 时代下的测试技术提供的往往不再是某一个独立的小工具,更多的是带来一套完整的解决方案,例如为用户提供一套定制化的 IDE 环境,结合录制回放、图像识别等技术,用户可能只需要做一些简单的框选、拖拽就能完成测试脚本的开发。另一方面,由于办公环境、硬件条件等因素的限制,越来越多的测试人员希望可以在移动端上直接发起测试,做到移动测试“移动测”。当然,无论是云端、IDE 端、还是移动端,都应该做到能力互通,即“多端多通”,这样才能让测试方案更加灵活、适用于更多场景。

640?wx_fmt=png


| 无线驱动的 Android 专项测试方案:SoloPi

“多端多通”的概念比较广,仅凭一篇文章可能无法阐述清楚,所以下面将会重点介绍为了迎接“移动 2.0+”时代,我们在移动端上实现的一套无线化、非侵入、免 Root 的 Android 专项测试方案 SoloPi。直接操控手机,即可实现自动化的功能、性能、兼容性、以及稳定性测试等工作。


1 整体架构

640?wx_fmt=png

这套方案中,底层依赖主要是“无线 ADB、系统辅助功能、Chrome 调试以及图像识别技术”,后文将会介绍它们具体的应用场景。同时,在底层依赖的基础上,我们封装了一套核心能力,由“控件定位、事件驱动、性能采集以及依赖注入”组成,并在服务层实现了录制、回放、数据处理等公共服务能力。在架构的最顶端,结合界面交互逻辑包装出了各个功能的入口。


2 无线 ADB

640?wx_fmt=png

大家都知道,对于 Android 自动化,ADB shell 的执行能力是一切的基础。

在 PC 上,通过 Android SDK 提供的ADB client 与同样运行于 PC 中的 ADB server 通信,再由 ADB server 通过 USB 与位于设备中的 Adbd 通信。要实现一套无线化的方案,必须要摆脱对 USB 线的依赖。好在 Android 系统还提供了一种基于 Socket 的 ADB 连接模式,既然是这样,那么只需要按照 ADB 通信协议在端上与本机的 5555 端口进行通信即可获得 ADB shell 的执行能力。

目前已经有一些实现 ADB 通信协议的 Java 开源项目,如 AdbLib ,他们封装了一套 ADB 的调试通信服务,能够替代 PC 上 ADB Server 的角色。我们在SoloPi 应用中集成了 AdbLib 开源库,包装成一套 ADB 命令执行工具,为 SoloPi 后续各种专项测试能力的实现奠定了坚实的基础。下面将开始为大家介绍 SoloPi 的几大核心功能。


3 录制回放

录制回放功能基于 AccessibilityService、ChromeDevToolsProtocol、图像识别三种模式实现精确查找,可以在设备本地实现回放,也可以转换为 Appium/Macaca 等框架的脚本,对接云测平台。另外,为了降低用例维护的成本,我们在端上还提供了用例编辑、流程控制的功能。 

实现方案

640?wx_fmt=png

在录制过程中,SoloPi 会对用户的操作进行拦截,识别用户操作的位置,高亮当前操作的控件,记录用户当前要做的操作类型,在每一步操作后,将操作类型及目标控件的各种信息都记录下来。这里的控件信息包括控件的 ID、文字等基本信息,以及相对布局、截图信息等。

在回放时,SoloPi 会逐条解析之前录制的数据,通过智能查找算法,综合各种属性,定位目标控件,找到控件后,就会执行相应的操作,如点击、滑动等。在所有步骤执行后,会展示本次回放的结果,包括日志、截图等信息,作为本次回放的总结。

控件查找能力

对于传统的 Native 应用,通过 UiAutomator dump 获取的属性就足以实现自动化了。然而,随着移动端动态化能力的稳步发展,越来越多的应用采用了 “Native + H5/小程序” 这种混合开发的方案。再考虑到近年来手游行业的飞速发展,手机游戏自动化测试的需求也越来越多。为了尽可能的适配各种场景,SoloPi 提供了三种查找模式:

640?wx_fmt=png

  • 第一种方案不必多说,核心就是基于 AccessbilityService 生成当前控件视图树,并记录下id、文字等属性,适用于 Native 场景。

  • 第二种方案基于 Chrome 的调试协议,通过注入js可以获得页面布局以及各元素属性,控件的定位思路与辅助功能这一套方案是一致的。适用于 H5/小程序场景。

  • 第三种方案是图像匹配方案,SoloPi 在端上实现了一套图像比对能力,结合了模板匹配、特征匹配等算法,并做了一定的适配和调优。适用于游戏自动化的场景。此外,在 SoloPi 目前的方案中,图像匹配能力还会作为前两种定位方式的兜底方案,进一步的提升控件查找的准确率。

回放能力

通过 SoloPi 录制的用例会以 JSON 的形式存储起来,用例不仅可以向上述视频演示的一样在设备本地直接回放,还可以通过 SoloPi 的解析器将用例转换为 Appium、Macaca 等目前主流自动化测试框架的脚本,轻松打通云测平台。另外,得益于文本抓取和图像识别能力,SoloPi 还实现了在 Android 端录制一遍用例,生成的脚本能够同时在 Android、iOS 双端回放的能力。

640?wx_fmt=png

更多功能

SoloPi 还提供了用例步骤的插入、删除、修改等用例编辑功能,可以有效降低用例的维护成本。另外,SoloPi 还引入了循环、条件等流程控制能力,若对用例进行合理编排,可轻松实现需要重复操作的工具脚本或是需要暴力回放的稳定性测试脚本。

640?wx_fmt=png

录制回放更多的能力还包括结合数据 Mock 解决用例回放不稳定的能力、打通性能测试的能力等等。


4 一机多控

在各类专项测试中,兼容性测试是最为耗时费力的一项,测试人员需要关注各种系统版本、各大手机厂商,各种类型的屏幕等等,想要通过纯人工测试来保证兼容性测试的质量成本是非常高的。

SoloPi 在录制回放能力的基础上实现了一套兼容性测试的解决方案。在录制回放的场景中,我们先是在一台设备上记录了用户的操作,然后再在任意一台设备上实现操作的回放。如果把场景扩展到多台设备上,就可以实现通过一台设备操控多台设备,我们把这套功能称为“一机多控”。具体说来就是主机与从机建立 Socket 连接,然后在主机上将用户的操作实时发送到各个从机,在从机上完成操作的回放。

640?wx_fmt=png

一机多控的环境搭建比较灵活,手边的手机在安装 SoloPi 后,通过简单的建联操作即可完成部署。一机多控适配了目前市面上主流机型和 ROM,并封装了一些提升测试效率的快捷功能,如应用安装、数据清理、设备信息查看等等。


5 性能测试

提到专项测试,不得不提性能测试。近年来,手机应用成为了人们日常生活中不可或缺的一部分,这也对应用的使用体验提出了更高的要求。  为了给用户带来“丝般顺滑”的体验,仅仅实现功能是不够的,而性能测试,就是打造优质应用不可或缺的一个环节。 然而,性能测试的开展并不是很容易,一方面,性能测试具有一定的门槛,很多时候需要开发脚本去实现,还要去处理各类兼容性问题。另一方面,大多数性能测试方案获取到的都是一些基本指标,难以发现深层次的问题。针对上述问题,SoloPi 实现了一套性能测试工具。包含常规性能指标获取、响应耗时计算以及移动 Lighthouse 三方面功能。

常规性能指标获取

SoloPi 支持 CPU、内存、fps、流量等常规指标的实时获取,同时支持将性能数据记录下来,存储到本地并通过报表形式展示。SoloPi 还提供了数据上传的功能,可以将数据发送给服务端做进一步的处理。整套性能工具支持手动触发和广播触发,可以和自动化测试轻松打通。 

响应耗时计算

除了常规性能指标的获取,SoloPi 还提供了响应耗时计算的功能。大家都知道,计算响应耗时的一种常用方法就是基于代码埋点或是系统日志(比如 activityDisplayed Time),但是这种方法计算得到的结果对于异步加载较多的界面来说会与用户实际的观感有比较大的偏差。

640?wx_fmt=png

SoloPi 基于录屏分帧能力实现了一套计算接近用户体验的响应时间的方案。具体的说,在开启录屏后,SoloPi 会基于 ADB shell 的 get event 命令监听屏幕的点击事件,将其作为计算响应耗时的起点,当录屏结束后,SoloPi 会从后向前倒序对视频进行对比,查找出界面趋于稳定的时间点,并作为计算的终点,二者相减就是响应耗时。

移动 Lighthouse

H5/小程序等技术在移动应用中的占比越来越高,如何测试这类应用的性能成为了一个新的课题。接触过前端性能的同学都知道,Lighthouse 是前端性能测试的利器,但是它无法在手机上直接应用。而 SoloPi 所做的,就是基于 CDP 协议,在客户端中实现了一套 Lighthouse 性能测试工具,它可以获取 H5/小程序页面的启动性能、资源流耗、请求质量、JS 质量、JSAPI 调用情况与页面信息,并内置了 30 余条前端开发最佳实践,旨在发现细粒度的性能问题。

640?wx_fmt=png

具体的实现方案,就是将 SoloPi 与待测应用建立基于 CDP 协议建立 Websocket 通信,监听页面发起请求、接收数据、开始加载等事件的回调、并收集报错、Trace 等数据。再按照启动性能、资源流耗、请求质量、JS 质量、 JSAPI 调用情况与页面信息 6 大维度进行数据的分类和整理,随后通过内置的规则对采集到的结果进行判断,最终生成报表并在界面中展示。

640?wx_fmt=png

| 更多

作为一套完整的专项测试方案,除了前面提到的录制回放、一机多控、性能测试外,SoloPi 还提供了数据 Mock,性能加压、网络模拟、智能 Monkey 等功能。目前 SoloPi的部分源码已开源(项目地址:https://github.com/soloPi/SoloPi )。

欢迎大家加入到项目中,与我们一同开发出更好用的测试工具!


| SoloPi 线下活动推荐

640?wx_fmt=jpeg

8 月 11日,SOFAStack 与你相约广州

SOFA Meetup#3 广州站:从开源技术到产品能力。

本期将带来开源技术:SOFARPC、分布式事务 Seata 模式详解以及发展进程,并拓展分享云原生产品能力,更有无线自动化测试框架 SoloPi 的首秀~

长按扫码或点击“阅读原文”,即可锁定现场席位~

640?wx_fmt=png

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android专项测试是一种针对Android操作系统进行的测试,旨在评估Android应用程序的质量和性能。在开发Android应用程序之前,进行专项测试可以帮助开发人员发现并解决潜在的问题,以确保应用程序能够在各种设备上稳定运行。 Android专项测试包括以下方面: 1. 兼容性测试:测试应用程序在不同版本的Android操作系统和不同型号的设备上的兼容性。确保应用程序可以在各种设备上按预期运行,不会出现崩溃或错误。 2. 功能测试:测试应用程序的各种功能是否按照设计要求正常运行。包括测试用户界面的交互、各种用户操作的响应和结果等。 3. 性能测试:测试应用程序的性能,包括内存占用、CPU利用率、启动时间、响应时间等。确保应用程序在各种情况下都能够快速响应用户操作,并且在长时间运行时不会导致设备负载过高。 4. 安全性测试:测试应用程序的安全性,包括对数据传输的加密、用户身份验证的安全性等。确保应用程序在处理用户敏感信息时能够保护用户的隐私和安全。 5. 压力测试:对应用程序进行长时间、高负载的测试,以确定其在长时间运行和并发访问时的表现情况。 通过进行Android专项测试,开发人员可以发现并修复潜在的问题,提高应用程序的质量和用户体验。这对于确保应用程序的可靠性、安全性和性能至关重要,也能够增加用户对应用程序的信任度,提高用户的满意度。 ### 回答2: Android专项测试是一种针对Android操作系统进行的测试。Android是一种常用的开源移动操作系统,广泛应用于智能手机、平板电脑等移动设备上。为了确保Android应用程序的质量和稳定性,需要进行专门的测试。 Android专项测试主要包括如下几个方面: 1. 兼容性测试:测试Android应用程序是否能在不同版本的Android操作系统上正常运行。这涉及到测试应用程序在不同分辨率、不同屏幕尺寸的设备上的表现。 2. 功能测试:测试Android应用程序的功能是否按照设计和需求正确运行。这包括对应用程序的各种功能模块进行测试,如用户界面、数据处理、网络交互等。 3. 性能测试:评估Android应用程序的性能,包括运行速度、响应时间、内存占用等。通过性能测试,可以找出应用程序中存在的性能瓶颈,以便优化和改进。 4. 安全测试:检查Android应用程序的安全性,包括用户数据的保护、权限管理等方面。通过安全测试,可以防止应用程序受到黑客攻击或数据泄露等安全问题。 5. 用户体验测试:评估Android应用程序的用户体验,包括界面设计、交互方式、功能布局等。通过用户体验测试,可以提高应用程序的易用性和用户满意度。 综上所述,Android专项测试是为了保证Android应用程序的质量和稳定性而进行的一系列测试。通过兼容性、功能、性能、安全和用户体验等方面的测试,可以发现和解决问题,提升应用程序的质量。 ### 回答3: Android专项测试是一种针对Android操作系统的应用程序进行的测试。Android系统是目前世界上最流行的移动操作系统之一,它在智能手机、平板电脑和其他移动设备中广泛使用。为了确保Android应用程序的质量和稳定性,进行专项测试是至关重要的。 Android专项测试通常包括以下内容: 1. 兼容性测试:测试Android应用程序在不同版本的Android操作系统上的兼容性。由于Android的版本众多,设备的屏幕尺寸、处理器和内存等硬件特性也各异,因此兼容性测试可以确保应用程序在不同环境下正常运行。 2. 功能测试:测试应用程序的各项功能是否按照设计要求正常工作。包括用户界面、数据输入、数据处理、网络通信等方面的功能测试。这可以确保应用程序的各项功能正常,不会出现错误和异常。 3. 性能测试:测试应用程序在不同负载下的性能表现。包括启动时间、响应时间、内存占用和电池消耗等方面的性能测试。这可以评估应用程序的性能是否满足用户的需求,并找出性能瓶颈和优化方向。 4. 安全测试:测试应用程序的安全性。包括数据保护、身份验证、权限管理和代码漏洞等方面的安全测试。这可以确保应用程序不会泄露用户的敏感信息,并能有效防御恶意攻击。 Android专项测试对于开发者和用户来说都是非常重要的。对于开发者来说,通过专项测试可以确保应用程序的质量和稳定性,提高用户体验,增加用户的信任和忠诚度。对于用户来说,专项测试可以提供安全可靠的应用程序,避免因应用程序错误导致的数据丢失和隐私泄露。 总之,Android专项测试是确保Android应用程序质量和稳定性的重要手段,对于开发者和用户来说都是非常有价值的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值