V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Riacya12
V2EX  ›  推广

APP 兼容性(2)揭秘岩鼠智能遍历

  •  
  •   Riacya12 · 2019-12-17 16:43:17 +08:00 · 1155 次点击
    这是一个创建于 1803 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文首发于知乎

    概述

    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 )概述

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1568 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:09 · PVG 01:09 · LAX 09:09 · JFK 12:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.