云测服务 APP 兼容性 (2) 揭秘岩鼠兼容性测试

UC研发效能 · 2019年12月12日 · 最后由 cmlanche 回复于 2019年12月13日 · 3673 次阅读

【本文首发于知乎】

概述

APP 兼容性测试大部分采用的是通用的方法,就是在 app 内随机操作。Android 自带的 Monkey 工具由于简单方便,一直沿用到现在并在开发者中广泛使用。但随着在大规模的应用,原生 Monkey 一些弊端也随之显现出来。

| 优点 |
- 简单方便一条命令就可使用,测试稳定

  • 每秒钟可以发送大量操作事件,压力足够,常常可以发现正常使用无法发现的问题
缺点
  • 单位时间内对 app 内所有控件的覆盖情况可能并不如意

  • 测试过程信息无法记录,以至于发现问题后无法分析问题产生的过程和原因

|


原生 Monkey 的缺点导致测试效果和效率都不可控,如何改善这些问题呢?岩鼠在这方面重点投入进行了较多探索,开发了 “智能遍历工具”——利用 UI 自动化的方式获取 APP 的控件,进行一个随机的可控的遍历,来达到尽可能覆盖被测 APP 内所有的界面和控件的目的。

框架技术方案


基于 UI 自动化实现的 Monkey 遍历工具主要分为以下 2 类

技术方案 基于 Macaca 或者 Appium 做驱动,在 PC 端实现遍历算法进行测试 基于 Uiautomator 驱动在 Android 手机上实现遍历算法进行测试
代表 Appcrawler, Macaca 自带的 NoSmoke Maxim
优点 1.不需要太关注驱动,利用现有 ui 自动化框架
2.测试结果数据便于在 PC 端保存
1.利用 Uiautomator 可以方便快捷执行 monkey,兼容性好
2.测试效率和稳定性更高
缺点 比较依赖框架,效率和稳定性更差一些 测试结果数据可能巨大,不好保存在手机端


从以上对比,可以看到基于 Uiautomator 方式直接在手机端运行,更方便部署执行,效率和稳定性也更好。因此岩鼠选择了这个方案进行改造。
当然在这里面还有一个问题就是 Uiautomator 官方已经不在进行维护,已经被 Uiautomator2 替代,像主流的 Appium 等框架也都是基于 Uiautomator2 进行开发了。但当前 Android 即使最新版本的 android Q 也仍然还能够使用 Uiautomator,相关的 api 也基本能够满足 Monkey 遍历测试的需求。
相比于 Uiautomator2,Uiautomator 的优势是不需要安装 apk 可以推送 jar 到手机端直接执行,避免了像 Uiautomator2 的框架都需要安装 2 个额外 APK 的问题,特别是 oppo,vivo 等手机需要安装密码等导致的安装成功率问题。
而 Uiautomator2 的优势是后续官方的持续支持,更多更好用的 API,可以获得应用 context 从而获得 android 的服务实现更多的功能。
岩鼠当前也正在逐步的演进,即将使用 Uiautomator2 来驱动测试。

遍历技术方案


控件的遍历方案是最核心的部分了。当然目标只有一个就是怎么样可以尽可能的覆盖 APP 所有的控件和功能,执行到最多的代码。


但遍历过程可能会遇到很多问题,例如:

  • 如何探索到所有的可操作的控件,访问到所有需要被测的 activity?
  • 如何提高遍历效率,避免控件过多的重复操作?
  • 如何屏蔽掉我们不想要的操作?
  • 如何限定在我们想要的测试范围?
  • 如何解决登录问题?
  • 如何评估测试效果?
  • 如何帮助后续复现问题?

包括但不限于以上的种种问题都是在实现可控 Monkey 过程中可能会遇到的问题,目前还没有一个统一的完美的解决方案,更多还是在实践中不断的改进和完善。

智能遍历算法

 
  智能遍历流程  



智能遍历测试流程整体上是遵循业界比较流行的方式通过 Uiautomator 获取当前页面的控件进行智能分析,提取分析出可遍历操作的控件。这样的好处是不言而喻的,对比原生 monkey,避免了大量的无效点击,大大提高了单位时间内对 App 控件操作的覆盖率,提升测试效率。


 深度优先搜索(DFS)


保证有效的测试,核心是有效可靠的遍历算法。根据 github 上的一些开源工具的研究发现,大部分的工具是使用深度优先搜索(DFS),原理就是限定能够访问的层级,然后递归的点击记录操作的控件,遇到走不到下一个界面时就回退到上一个界面循环下去。
听上去很不错,其实其中存在很多问题。例如 webview 界面网页产生大量的控件而且深度也是不可控的。测试中遇到崩溃跳出等导致的重新递归。各种界面如何判定控件是被访问过的,都会对遍历过程产生很大的影响。
对于简单的 APP 这种遍历方式还是很有用的,但对于复杂的存在大量动态内容的 APP 执行的效果就不好评估了。


  岩鼠智能遍历算法  


岩鼠之前尝试使用 DFS 算法,但是效果并不太满意。因此自主开发了效果更优的智能遍历算法。
岩鼠智能遍历算法,主要是记录页面的控件信息,通过控件特征信息的提取对界面的唯一性进行定义,并记录了页面之间访问的关系。由于存在这些必要的访问关系,我们可以更智能的了解到访问过的页面和测试路径信息,避免了大量的重复点击和实现新路径的探索。
同时我们也可以对页面进行定向干预,对指定页面例如网页的访问,满足加强特定页面测试覆盖的需求。
另外由于我们的测试是运行在手机上的,并不依赖于例如 appium 的框架进行测试,因此相对比而言不依赖于这些框架的点击效率,整体测试效率的提升也是非常明显的。


评估智能遍历的效果


对于遍历效果的分析,岩鼠智能遍历工具提供了对于 Activity 级别的点击覆盖情况分析,可以知道具体访问过哪些 Activity 以及对应的点击次数。这个是可以通过岩鼠的报告页面进行查看。



另一个评估效果的方式,是对每次操作和点击位置的截图以及对界面控件信息的记录。但这对于在手机端执行的 “智能遍历” 来说数据量比较大,特别是很多时候都是运行几个小时,产生过几千次的点击在手机端保存这些信息不会太合适。不过岩鼠提供了实时的崩溃分析并进行崩溃点的录像。可以满足一定的崩溃定位需求,这个可以通过岩鼠测试报告进行查看。



另外平台也提供了遍历点击操作日志的下载,你可以看到测试过程中操作的 activity 以及控件的基本描述和操作类型,让你对测试情况有一个大概的了解。

未来方向

  • 优化算法,提升 APP 控件遍历覆盖度和效率
  • 建立遍历效果评估体系
  • 引入 AI 算法实现更智能的遍历


欢迎体验


岩鼠云真机和兼容性测试服务,正在限时免费体验中,欢迎试用和交流!
https://yanshu.effirst.com/


长按识别二维码,关注我们,更多产品资讯,技术干货分享

更多兼容性相关文章

APP 兼容性(1)概述

共收到 4 条回复 时间 点赞

使用了,没有自动登录账号啊

青谷 回复

是的,由于不同 APP 的登录机制不同,还涉及到是否单点登录等等问题,现阶段还没有自动技术较好的支持,如有登录需求,可联系我们进行适配

用 uiautomator1 来驱动安装 uiautomator2 就好啦,安装问题不大滴 😋

很棒,持续关注

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册