发布 UI 调用覆盖率功能,助力动态安全测试
Ostorlab 在分析环境中发布了 UI 调用覆盖率功能,用于展示动态安全测试过程中所执行的 UI 流程。
今年夏天,Ostorlab 团队一直在紧张忙碌地工作,我们很高兴在接下来的几周里陆续发布一系列新能力和新功能。首先发布的是 UI call coverage,以及全新增强版的 Monkey Tester。
新增的功能可以展示动态分析过程中所执行的 UI 流程,同时也提供了一种简便的方式来验证应用的覆盖率,确保关键用例得到覆盖。

新版本对 Monkey Tester 的逻辑进行了大量增强,能够更好地理解 UI 组件,并生成有意义的事件,从而对应用逻辑实现较高的覆盖率。
Monkey 测试与 UI 交互自动化
Monkey 测试是一种自动化测试技术:测试执行器向应用的不同部分注入输入、执行点击或触发事件,以测试应用的多个方面,例如发现崩溃或错误、跟踪性能或发现安全问题。
在动态分析过程中,Ostorlab 的扫描器使用真机,由 Monkey Tester 生成一系列事件与应用进行交互。这些输入既可以是直接的用户交互,例如滑动、点击按钮、填写文本框,也可以是系统交互,例如打开/关闭 Wifi 连接、蓝牙、GPS,或发送 IPC。
我们的技术同时支持 Android 和 iOS 平台,既覆盖原生应用,也覆盖 Xamarin、Cordova、Ionic 和 Flutter 等跨平台框架。
虽然已有少量用于 UI 测试自动化的开源工具,但它们存在以下几个问题:
- 只专注于单一平台,缺乏统一的方式来运行或描述测试
- 对多个常见平台和框架的支持较差。尤其是某些框架创建 UI 组件的方式非常特殊,例如
Xamarin和Flutter。 - 对关键使用模式的覆盖较差,例如需要接受政策条款的注册流程或填写结账菜单。
为了克服这些问题,并在所有平台上尽可能提高应用的覆盖率,我们依赖三种探索策略:
- 基于随机的策略
- 基于规则的策略
- 基于进化的策略
探索策略
使用类似策略的并非只有 Ostorlab。已有多个开源项目和研究论文实现了类似的策略,其中最著名的是 Facebook 的 Sapienz。其开源版本已不再维护,但 Facebook 曾多次公开介绍其内部版本所做的改进。
与大多数此类实现相比,我们在设计上有两个关键区别。第一,这些策略并不是分别执行的,而是作为集成策略的一部分被混合使用。这使得多个表现较弱的策略能够转化为一个强大的策略。
第二个关键区别在于,这些策略不会生成可能适用、也可能不适用的僵化测试用例,因为测试的可复现性往往无法保证。相反,这些策略会生成 test minions,它们带有一组参数,这些参数会改变 minion 与应用交互的方式,以及优先采用哪类操作或操作序列。
基于随机的策略
Random-based strategy 是与应用交互最基础的技术。它会生成一系列随机事件,适用于包含多个相互独立组件的视图。例如,一个包含多个可点击元素、文字文章和视频的视图。
为了说明随机策略的工作方式并衡量其效率,下面是一个包含 6 个 UI 组件的简单视图。在该视频中,我们可以看到 Monkey Tester 生成的各种事件以及它如何对这些组件进行操作:

对于包含 4 种事件类型(滑动、点击、触摸和勾选)的随机策略,平均需要 30 个事件才能与这 6 个不同的 UI 组件完成交互。
如果要按特定顺序进行交互,例如 Fill Textbox + Enable Checkbox + Click button 2,平均需要 95 个事件。
基于随机的策略虽然简单,但覆盖复杂的逻辑模式可能需要很长时间(甚至永远无法覆盖)。
基于规则的策略
Rule-based strategy 将用户交互与应用的 UI 组件关联起来。它使用搜索机制来识别特定类型的组件,并能够对这些组件应用高级逻辑。
该技术适用于可以根据组件类型预测操作的视图。例如,一个包含待填写文本框、多个复选框和可点击按钮的表单视图。
下面是一个简单登录视图的示例,其中包含用户名、密码和登录按钮。

在这个示例中,一条规则会检查当前视图中是否存在密码字段,也可以进行更复杂的检查,以识别信用卡或地图组件
Monkey Tester 首先遍历所有规则,确定与当前视图匹配的规则,然后从中随机选择一条。 在上面的示例中,Monkey Tester 首先识别出存在多个文本框,并在随机策略交互中先用虚拟值填写了所有文本框,随后应用了一条登录规则:注入用户名和密码,并点击登录按钮。
基于进化的策略
Search-based strategy 使用由遗传算法驱动的元启发式搜索算法。
遗传算法用于优化 test minion 的设置,以最大化覆盖率。该策略会跟踪输入以及应用的覆盖率。 在每一轮迭代中,设置都会发生变异以提高覆盖率,同时淘汰表现较弱的 minion。
该策略适用于视图路径会因用户输入而不同的应用。例如,一份问卷会根据所提供的答案进入不同的视图。
总结
尽管每种策略在特定类型的视图上都表现出良好的覆盖率,但在超过 1000 个移动应用上测试时,每种策略单独使用时的整体覆盖率都相对较低。
各策略达到的最高平均覆盖率分别为:随机策略 35%,基于规则的策略 27%,基于搜索的策略 38%。 然而,将这些策略组合成一个融合上述所有策略的集成策略后,能够在更短的时间内达到显著更高的 52% 覆盖率。
总体而言,全面改进的 Monkey Tester 和新的测试用例覆盖率可视化功能将带来更高的覆盖率,并让您更容易直观地看到和理解幕后所完成的工作。