SoloPi 无线驱动的 Android 专项测试方案 SoloPi (开篇)

Soloπ · June 14, 2019 · Last by 小马 replied at September 11, 2019 · 3158 hits

一、前言

      去年的一个周会上,有人抛出个问题,你觉得测试的意义是什么?大家七嘴八舌,价值导向基本一致: 希望用户少一些困惑苦恼、多一些便捷美好。也有人意料之中的发了牢骚:我们测试同学也是用户,扛着 KPI 去忍受各种可测性问题,亟需更好的服务。庆幸的这句话很快的产生了共鸣,于是我与几位感同身受且志同道合的同事,立即决定在这个方向上做点什么。

      一年多的时间里,我们站在 GT、Appium、Macaca、Airtest 等巨人们的肩膀上,在解决 UI 自动化兼容性性能测试 费时费力等问题之路上,做出了些许突破。今天起,我们会在 TesterHome 社区将我们具体的实践经验通过系列文章传递给测试领域的各位同仁伙伴,希望大家协力为行业创造更多简单的小美好。

      本文我们将针对 Android 专项测试方案 SoloPi 展开核心能力以及局部方案介绍,关于能力的组建过程及方案背后的具体架构解析,后续我们会一一展开。

二、自动化测试框架——SoloPi

      有自动化测试经验的同学都知道,自动化框架的核心能力在于 控件查找事件驱动 。为了能够不依赖 PC 而直接在端上完成常规的自动化测试,提升自动化测试体验,我们在端上构建了一套部署灵活、操作简单、执行高效的自动化框架 SoloPi。

      SoloPi 可以在不侵入被测应用的前提下,基于系统的辅助功能以及图像匹配能力的智能查找算法,能够对控件进行精准定位,在端上实现了控件查找能力。SoloPi 通过 无线 ADB 方案 对 Android 应用进行提权,避开了端上应用受系统权限管控的限制,具备了原本 PC 自动化框架借助于 ADB 工具才拥有的便捷操控(如点击、滑动、输入等),在端上实现了事件驱动的能力。

      下面先介绍下无线 ADB 方案的原理以及在此基础之上建立的自动化、兼容性以及性能测试的方案,自研的智能查找算法会在后续文章中单独介绍。

  1. 无线 ADB 方案

          目前市面上的自动化测试、性能测试方案,大多是基于移动设备的 ADB 能力,通常需要 PC 来驱动。Android 系统为了测试、开发人员更好地进行调试,还提供了一种基于网络通信 (Socket) 的 ADB 连接模式,这种模式不需要 USB 连接,只需要保证网络连通即可远程控制设备,因此设备的控制端就不局限于 PC 一种,任何按照 ADB 通信协议与调试端口通信的设备,包括 Android 设备自身,都可以替代 PC 的角色。

          目前已经有一些实现 ADB 通信协议的 Java 开源项目,如 AdbLib ,他们封装了一套 ADB 的调试通信服务,能够替代 PC 上 ADB Server 的角色。我们在 SoloPi 中集成了 AdbLib 开源库,包装成一套ADB命令执行工具,实现了在非 Root 场景下 Android 客户端应用的提权,示意图如下。

  2. 基于录制回放自动化测试

          为了在端上拥有良好的自动化测试体验,一方面,我们参考了 Appium 的整体设计(Appium 自动化能力基于 UIAutomator,而 UIAutomator 控件查找、事件消息获取的能力来源其与系统辅助功能的通信),在客户端上通过辅助功能(AccessibilityService,可参考 AccessibilityService)获取屏幕上的控件信息,作为后续自动化操作的原始数据,可以满足大部分场景下的控件查找。另一方面,我们还参考了 Airtest 的模式,在客户端上实现了一套图像查找算法,能够较好地满足游戏测试等场景。此外,我们还将UIAutomator Viewer等工具通过鼠标点击查看控件的交互方式移植到 SoloPi 上,通过检测用户点击,在页面视图结构中定位到需要操作的控件并高亮显示。

          基于此,SoloPi 可以给用户提供快速定位、操控控件的能力,继而通过组装步骤在端上完成自动化用例的录制。

          在完成用例录制后,结合 SoloPi 自研的智能查找算法,对目标控件进行精准定位,在用户无需编写任何代码情况下,实现了一套纯端上的录制回放运作模式,克服了传统自动化框架中环境依赖多、驱动靠 PC、测试代码不易编写等不足,提供了更好的工具使用体验。

  3. 基于一机多控的兼容性测试

          在录制回放能力的基础上,SoloPi 还实现了一种多机联动的操作模式。在以往的兼容性测试中,业务同学往往需要在多台设备上重复进行测试,这种工作不仅费时费力,而且容易产生遗漏。一机多控(操作一台设备,其他设备都会同步联动)使得业务同学不再需要执行重复操作,可以将注意力更多地放在待测界面在不同设备型号、分辨率或系统版本的显示效果上。同时任意一台机器都可以作为主机,从机建连不需要后端 Server,一定程度上达到了去传统云测的中心化管理。

  4. 基于指标监控和录屏的性能测试

          SoloPi 参考了 GT 的部分设计,在无线 ADB 方案的基础上,提供了一套使用便捷、数据比较完善的性能检测工具,能够监控 CPU、内存、FPS、耗电、网络流量等常规指标,其中 CPU、内存为进程维度指标,FPS、网络流量为应用维度指标。 除了采集常规性能指标,SoloPi 还加入了页面加载耗时计算的功能,能够简单快速的获取从用户操作到屏幕变化停止的时长,直观反映用户体感的加载耗时。

三、使用实例

  1. 自动化测试应用、游戏
    删除垃圾邮件
    删除垃圾邮件

    游戏自动化
    游戏自动化

  2. 性能测试
    常规指标采集

    响应耗时计算
    响应耗时测试

  3. 一机多控的兼容性测试
    一机多控操作视频

四、更多增强能力

      除本文提到的几点,SoloPi Dev 版本还具备数据 mock、稳定性遍历、网络模拟、Lighthouse 等能力,后续将迭代发布。

      更多复杂场景的定制化能力、云端用例管理、远程真机租用、以及完整的测试报告呈现,由移动开发平台 mPaaS 提供整体方案。我们希望通过三端(移动端、IDE 端、云端)三通(能力通、数据通、用户通),为每一位测试同学提供无缝的衔接体验。欢迎进一步了解 mPaaS :https://tech.antfin.com/docs/2/49549

五、联系我们

      欢迎加入SoloPi 体验交流群,群力群策把工具做得更好。

活动推荐:MTSC 2019 测试开发大会

      MTSC2019 第五届中国移动互联网测试开发会将于 6 月 28-29 日在北京国际会议中心举行,50+ 来自 Google,BAT,TMD 等一线互联网企业的测试大咖分享精彩议题,涵盖移动自动化测试、服务端测试、质量保障 QA、高新测试技术(AI+、大数据测试、IoT 测试)等专题。

      蚂蚁金服多位技术专家将在大会上分享精彩议题,解密蚂蚁金服内部移动测试 2.0+ 演进之路、代码实时染色系统如何完成代码覆盖率检测等,期待与你交流。

      立即扫码,获取大会第一手议程信息。

共收到 18 条回复 时间 点赞

为啥在这边没人回复,这个能解决很多问题了

等一个开源

一机多控具体怎么实现的呢

Soloπ安装包仓库地址: https://github.com/soloPi/SoloPi
使用方法可以先参考仓库的README简版文档,更详细的文档近期会在社区和github更新。
另外MTSC2019会上也会详解部分实现原理。

斗笠 回复

批量回放选择界面能加入编辑顺序就好了

Bach 回复

用例编排的确是个强诉求,下个版本会支持。

请问下,这个是只需要录制,不需要写代码的么

请问下大家有没有遇到选择测试应用时,有的已安装应用未显示的备选列表,应该怎么操作才能显示出来

斗笠 回复

请问下有没有遇到选择测试应用时,有的已安装应用未显示的备选列表,应该怎么操作才能显示出来

王加 回复

录制及可视化的二次编辑,不需要写代码。通过代码的二次编辑后续也会支持。

张小强 回复

我重新进入应用。然后就全部显示了

solopi支持微信小程序吗

未root的情况下,怎么做到在手机端进行回放的呢,是通过无线adb吗,那是不是回放的时候也必须连无线adb

土豆 回复

支持的

瞧瞧 回复

回放时也需要连接无线adb,但只要连接过一次,后续的adb连接过程是对用户无感的

Cathor SoloPi 架构解析 | 录制回放的原理与实战 中提及了此贴 11 Aug 14:28

有没有文本框 输入无效的情况?

刚接触这块,请问收集到的数据指标(pss内存、Private Dirty、帧率等)有参考标准吗?我录制了一段,但不会分析

Author only
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up