什么是猴子和大猩猩测试?示例、差异

⚡ 智能摘要

猴子测试将随机的、未计划的输入输入到正在运行的应用程序中,并观察它是否能够存活,因此在编写任何预定义的测试用例之前,崩溃、冻结和未处理的状态就会暴露出来。

  • 🐒 核心思想: 随机点击、击键和手势会探测系统是否存在崩溃点,而不是预期结果。
  • 🦍 大猩猩对比: 猩猩测试反复测试一个模块,而猴子测试则遍历整个应用程序。
  • 🧠 三个等级: 愚笨的猴子、聪明的猴子和极聪明的猴子对被测试系统的了解程度各不相同。
  • ️ 诚实的权衡: 运行成本低、速度快,但缺陷难以重现,且无法保证覆盖范围。
  • 🛠️ 工具: Android UI/应用程序测试工具 Monkey、MonkeyRunner 和类似工具会自动生成事件流。
  • 🎯 最合适: 早期版本、交互式界面和稳定性测试,始终与脚本化和探索性测试相结合。

软件测试中的猴子测试和猩猩测试比较

什么是猴子测试?

猴子测试 猴子测试是一种软件测试技术,测试人员在没有预定义测试用例的情况下,向应用程序中输入随机数据,并检查应用程序的运行情况,特别是是否崩溃。猴子测试的目的是通过实验性的、非脚本化的交互来发现程序缺陷和错误。

这个名字来源于下图所示的一幅简单的图画。

测试人员扮演猴子,在猴子测试期间输入随机数据。

  • 在猴子测试中,测试人员(有时是开发人员)被视为“猴子”。
  • 如果让猴子使用电脑,它会随机执行任务,而不会理解系统。
  • 同样地,测试人员向被测系统施加随机输入,以查找错误,而无需预先定义任何测试用例。
  • 在某些情况下,猴子实验旨在 单元测试 or 图形用户界面测试.

什么是大猩猩测试?

大猩猩测试 是一种软件测试技术,其中对程序的一个模块进行反复测试,以确认其能够正常工作且不包含任何缺陷。

同一个模块可能会以完全相同的方式被测试上百次,这就是为什么“猩猩测试”也被称为“令人沮丧的测试”。猴子测试是在整个应用程序中随机进行测试;而猩猩测试则会反复测试同一个地方,直到发现问题或证明其安全性为止。

猴子测试的类型

根据测试人员对系统的了解程度,猴子测试可以分为几类。下图总结了这三种类型。

愚蠢的、聪明的和杰出的猴子测试

  • 笨猴子: 测试人员对系统及其功能一无所知,因此无法保证任何输入都是有效的。
  • 聪明的猴子: 测试人员对系统、其用途和功能有准确的了解,能够熟练地操作系统并提供有效的输入。
  • 聪明的猴子: 测试人员根据真实用户行为进行工作,并能指出缺陷可能出现的位置。

猴子测试、大猩猩测试和临时测试

猴子测试、大猩猩测试和 临时测试 它们都带有即兴发挥的风格,因此经常被混淆。下面的两张表格将它们区分开来。

猴子测试与大猩猩测试

猴子测试 大猩猩测试
随机执行,没有预先设定的测试用例。 既非预先设定,也非随机——只是重复相同的检查。
对整个系统执行,可能涉及许多测试用例。 仅对少数选定的模块和少量测试用例进行了测试。
目的是检查系统是否崩溃。 目的是检查该模块是否正常工作。

猴子测试与临时测试

猴子测试 临时测试
随机执行,没有预先设定的测试用例。 由于没有计划或文档,因此没有准备测试用例或SRS。
测试人员可能不知道该系统是什么,也不知道它的用途。 测试人员必须在测试开始前充分了解系统。
目的是检查系统是否崩溃。 目标是将系统随机拆分成若干子部分,并检查其功能。

猴子试验的优点和缺点

因为该技术以速度换取规划,所以它的优点和缺点都源于同一特性。

猴子测试的优势

  • 新型漏洞: 测试人员可以自由地在先前规定的场景之外进行测试,从而发现一些没有人想到要编写脚本的错误。
  • 易于执行: 针对随机数据安排随机操作是快速测试系统性能的一种方法。
  • Less 熟练的人员: 猴子实验通常不需要经验丰富的测试人员就能进行。
  • Less 昂贵: 与脚本套件相比,它的设置和运行所需的费用要少得多。

猴子试验的缺点

  • 漏洞可能很难重现: 因为输入是随机的,如果没有记录的种子,可能无法重现故障。
  • Less 准确性: 测试人员无法定义确切的测试场景,也无法保证测试内容的准确性。
  • 技术专长仍然很有帮助: 为了确保测试结果有意义,测试人员需要具备良好的领域知识。
  • 相对于产量而言速度较慢: 运行时间可能很长,但仍然很少出现缺陷,从而导致系统出现漏洞。

如何进行猴子测试

当使用工具驱动猴子测试时,效率会大大提高,并且可以针对特定目标运行。 Android 构建包括桌面应用程序和 Web 应用程序在内的各种应用。一般流程如下:

  1. 将待测应用程序注册到驱动该应用程序的工具或专用服务器上。
  2. 准备工具构建测试套件所需的参考资料和配置。
  3. 运行已构建的测试套件。
  4. 让工具写入日志——“猴子测试”日志文件记录每个生成的事件和结果。
  5. 允许运行继续进行,直到系统达到崩溃点,此时会将出错的操作记录在日志中。
  6. 将报告分享给相关团队,并将测试数据保存以备将来参考。

保留所有日志。只有保存了事件序列和生成该事件的种子,随机运行的结果才能在以后派上用场。 缺陷管理 可以将崩溃原因追溯到可重现的输入。

猴子测试工具

猴子测试通常是自动化的,因为机器可以在人生成几十个事件的时间里生成数千个事件。常用的选项有:

  • UI/应用程序练习猴: 内置于 Android 那条运行在 亚行的shell 并将伪随机的用户事件流(例如点击、手势和按键)以及系统级事件发送到设备或模拟器。
  • 猴子跑者: 独立 Python API 它能从工作站驱动设备和模拟器,发送特定命令并捕获屏幕截图。尽管名称相似,但它与训练猴子(Exerciser Monkey)并非同一工具。
  • UI Automator 和 Appium: 一般 移动测试 可以通过脚本在构建过程中触发半随机事件序列的框架。
  • 模糊测试工具,例如 AFL: 同样的随机输入思想也应用于数据而非手势,这在[此处应插入相关内容]中有所介绍。 模糊测试.

对猴子测试的工具支持比对脚本测试的工具支持要少。 自动化测试因此,大多数团队会将通用事件生成器与他们现有的框架结合起来,而不是购买专门的产品。

何时使用猴子测试

猴子测试只能在特定情况下使用,而不能作为计划测试的通用替代品。

在以下情况下使用它:

  • 在正式测试用例出现之前,早期版本需要进行低成本的稳定性检查。
  • 该界面具有高度交互性——游戏、绘图工具、媒体播放器——因此很难预测用户的真实行为。
  • 你想泡个澡吗? 应力 运行数小时以查找崩溃、内存泄漏和未处理状态。
  • 版本发布已通过脚本检查,但您仍希望进行独立检查,以查找脚本未涉及的任何内容。

以下情况应避免使用:

  • 你需要可重复的证据来证明某项要求已得到满足——这就是书面文件的作用。 测试用例.
  • 该版本极不稳定,每次运行都会立即崩溃,导致所有问题都隐藏在第一次失败之后。
  • 时间紧迫,因为随机搜索并不能保证一定能找到任何东西。

实践中,混合方法能取得最佳效果:脚本测试涵盖已知流程, 探索性测试 故意探索未知领域,而猴子测试则攻击他们两人都认为永远不会发生的事情。

常见问题

这个名称借用了“无限猴子”的意象:一只猴子随意敲击键盘足够长的时间,最终会敲出一些有意义的东西。应用到软件领域,随机输入最终会达到一些设计者始料未及的状态。

探索性测试是经过深思熟虑的:测试人员提出假设,进行验证并做出调整。而猴子测试则完全是无目的的。前者依赖于判断,后者则依赖于数量和随机性。

它们都遵循随机输入原则,但目标不同。猴子测试通过向界面触发用户事件来进行测试。模糊测试则向解析器和API提供格式错误的数据,通常用于查找安全漏洞。

Chaos Monkey属于混沌工程范畴:它会随机禁用服务或破坏基础设施,以测试系统的弹性。其共同理念是随机性,但目标是运行平台,而非用户界面。

模型可以使事件流偏向真实用户的操作路径,从而将原本愚蠢的操作变成更聪明的操作。它们还可以对重复的崩溃日志进行聚类,并对哪些随机故障最值得开发人员优先关注进行排序。

GitHub 副驾驶 它能快速构建测试框架——包括事件生成器、种子处理、日志解析器和崩溃分类脚本。随机性策略和通过标准仍需测试人员定义。

有用的指标包括每千次生成操作的崩溃次数、发现的唯一缺陷数量、运行期间达到的代码覆盖率以及首次故障时间。应该观察不同构建版本的趋势,而不是只看一次运行的结果。

记录随机种子和事件日志。接受种子的工具会重放相同的序列,这样就可以将故障范围缩小到一个可重现的简短案例,并将其作为正常缺陷提出。

总结一下这篇文章: