我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 96.75% 的成绩。 了解更多

产品

产品

发布 UI 调用覆盖率功能,助力动态安全测试

Ostorlab 在分析环境中发布了 UI 调用覆盖率功能,用于展示动态安全测试过程中所执行的 UI 流程。

今年夏天,Ostorlab 团队一直在紧张忙碌地工作,我们很高兴在接下来的几周里陆续发布一系列新能力和新功能。首先发布的是 UI call coverage,以及全新增强版的 Monkey Tester。

新增的功能可以展示动态分析过程中所执行的 UI 流程,同时也提供了一种简便的方式来验证应用的覆盖率,确保关键用例得到覆盖。

UI 动态测试
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 生成的各种事件以及它如何对这些组件进行操作:

UI 动态测试的随机策略
随机规则示例

对于包含 4 种事件类型(滑动、点击、触摸和勾选)的随机策略,平均需要 30 个事件才能与这 6 个不同的 UI 组件完成交互。 如果要按特定顺序进行交互,例如 Fill Textbox + Enable Checkbox + Click button 2,平均需要 95 个事件。

基于随机的策略虽然简单,但覆盖复杂的逻辑模式可能需要很长时间(甚至永远无法覆盖)。

基于规则的策略

Rule-based strategy 将用户交互与应用的 UI 组件关联起来。它使用搜索机制来识别特定类型的组件,并能够对这些组件应用高级逻辑。 该技术适用于可以根据组件类型预测操作的视图。例如,一个包含待填写文本框、多个复选框和可点击按钮的表单视图。

下面是一个简单登录视图的示例,其中包含用户名、密码和登录按钮。

基于规则的 UI 测试示例
随机规则示例

在这个示例中,一条规则会检查当前视图中是否存在密码字段,也可以进行更复杂的检查,以识别信用卡或地图组件

Monkey Tester 首先遍历所有规则,确定与当前视图匹配的规则,然后从中随机选择一条。 在上面的示例中,Monkey Tester 首先识别出存在多个文本框,并在随机策略交互中先用虚拟值填写了所有文本框,随后应用了一条登录规则:注入用户名和密码,并点击登录按钮。

基于进化的策略

Search-based strategy 使用由遗传算法驱动的元启发式搜索算法。

遗传算法用于优化 test minion 的设置,以最大化覆盖率。该策略会跟踪输入以及应用的覆盖率。 在每一轮迭代中,设置都会发生变异以提高覆盖率,同时淘汰表现较弱的 minion。

该策略适用于视图路径会因用户输入而不同的应用。例如,一份问卷会根据所提供的答案进入不同的视图。

总结

尽管每种策略在特定类型的视图上都表现出良好的覆盖率,但在超过 1000 个移动应用上测试时,每种策略单独使用时的整体覆盖率都相对较低。

各策略达到的最高平均覆盖率分别为:随机策略 35%,基于规则的策略 27%,基于搜索的策略 38%。 然而,将这些策略组合成一个融合上述所有策略的集成策略后,能够在更短的时间内达到显著更高的 52% 覆盖率。

总体而言,全面改进的 Monkey Tester 和新的测试用例覆盖率可视化功能将带来更高的覆盖率,并让您更容易直观地看到和理解幕后所完成的工作。

标签:

Android, iOS, UI, DAST, monkeytester