什么是Monkey测试?
以下是官方说法:
Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;这种随机性可以模拟真实用户的行为,并在一定程度上发现应用程序中的潜在问题,例如崩溃、内存泄漏、界面冻结等。
在 Android 平台上,Android 提供了一个名为 "Monkey" 的工具,可以执行 Monkey 测试。通过命令行或者脚本调用 Monkey 工具,可以指定测试的时间、事件频率、包名等参数。
Monkey 工具会自动生成并发送用户事件,直到测试结束或者满足某个停止条件为止。
然而,Monkey 测试也存在一些缺点:
-
1. 缺乏场景:Monkey 测试的随机性可能无法模拟特定的使用场景,某些功能可能得不到充分测试。
-
2. 无法理解应用逻辑:Monkey 测试只是模拟用户输入事件,并不理解应用程序的逻辑,因此可能无法发现一些逻辑错误。
-
3. 难以重现问题:由于 Monkey 测试的随机性,有时很难重现出测试中发现的问题,使得问题的调试和修复变得困难。
我所认为的Monkey测试:指像猴子一样,不知道程序的任何用户交互方面的知识,就对界面进行无目的、乱点乱按的操作;
我想要的Monkey测试:不用熟悉业务逻辑,通过界面随机测试,发现浅层的交互问题、前端逻辑问题。
Monkey测试的优点有哪些?
-
1. 自动化:Monkey 测试是自动化的,无需手动操作,可以节省测试人员的时间和精力。
-
2. 随机性:Monkey 测试的随机性可以发现一些普通的测试方法可能遗漏的问题。
-
3. 广泛性:Monkey 测试可以覆盖应用程序的大部分功能,包括一些边缘情况。
-
4. 压力测试:Monkey 测试可以通过模拟大量用户事件来对应用程序进行压力测试,以评估其在高负载情况下的稳定性和性能表现。
常见的Monkey测试工具有哪些?
1. adb:Android 官方提供的 Monkey 测试工具,可以通过 adb 命令调用。
它可以模拟用户在 Android 设备上的随机操作,如触摸、滑动、按键等。
通过命令行或者脚本调用 Monkey 工具,可以指定测试的时间、事件频率、包名等参数。
Monkey 工具会自动生成并发送用户事件,直到测试结束或者满足某个停止条件为止。
Android 调试桥 (adb) | Android Studio | Android Developers
2. Chaos Monkey: Netflix 开源的工具,用于在分布式系统中执行随机故障注入测试,模拟实际运行中的故障情况,包括关闭服务器、网络分区等。虽然它主要用于测试分布式系统,但也可以应用于 Web 应用程序的测试。
Home - Chaos Monkey
3. Gremlins.js: 一个 JavaScript 库,可以在 Web 页面上执行随机化的用户行为,如点击、滚动、输入等,以测试页面的稳定性和性能。
它可以模拟真实用户的随机行为,并帮助发现页面中的一些问题。
https://github.com/marmelab/gremlins.js?tab=readme-ov-file#cypress
4. Selenium with TestNG/JUnit: 虽然不是专门的 Monkey 测试工具,但 Selenium 是一个流行的自动化测试框架,可以用于执行 Web 应用程序的功能测试和界面测试。
结合 TestNG 或 JUnit 等测试框架,可以编写随机化测试用例,模拟用户的随机操作行为。
如何选择合适的Monkey测试工具?
需求是什么?
上手简单,适用于web端。
满足需求的工具有哪些?
1) Selenium
Selenium是一个用于Web应用程序测试的开源工具。它支持各种编程语言,如Java、C#、Python等,可以用于自动化测试Web应用程序的功能。
2)Puppeteer
Puppeteer是由Google Chrome团队开发的Node库,用于控制Chrome或Chromium浏览器。它提供了一套高级API,可以用来模拟用户操作,如点击、输入文本等。
3) Cypress
Cypress是一个现代化的Web测试工具,它允许你编写测试脚本,模拟用户操作,并提供实时反馈。它支持各种测试框架,如Mocha、Jasmine等。
4) WebDriver
WebDriver是一个用于Web应用程序测试的开源工具,它提供了一套API,可以用来模拟用户操作。WebDriver支持多种编程语言,如Java、C#、Python等。
5) Jest
Jest是一个流行的JavaScript测试框架,它可以用于测试React、Angular等前端框架的应用程序。Jest支持模拟用户操作,如模拟点击、输入等。
6) gremlins.js
gremlins.js是一个用于测试Web应用程序的JavaScript库,它可以模拟用户在浏览器中进行的各种操作,如点击、滚动、键盘输入等。这个库通常用于测试Web应用程序的健壮性和稳定性。
如何选择?
易操作,少编程,能够python语言支持。所以,我选择Gremlins.js和Selenium。
如何使用Monkey测试工具?
1. Gremlins.js安装方法
Github地址为https://github.com/marmelab/gremlins.js。
使用npm安装,命令为:npm i gremlins.js。
2. Gremlins.js的Monkey测试
Gremlins.js提供两种使用方式:编写js脚本或着bookmarklet。本文介绍基于bookmarklet的方式进行monkey测试。该方法简单,直接将bookmarklet代码输入在浏览器的console窗口运行即可得到结果。
但值得注意的是:由于安全限制,Bookmarklet可能无法在所有浏览器中正常工作,特别是如果你的浏览器有严格的安全设置。此外,Bookmarklet通常只在当前页面中运行,而不是在整个浏览器中运行,因此它们可能无法访问某些资源或功能。
1)基于bookmaklet的Monkey测试
如下图所示,打开gremlins.js的bookmarklet标签页面,勾选对应操作的标签,获取bookmarklet code。
其中,Mogwai表示监视窗口,species表示监视窗口中的动作(如,点击click,表单填写formFilter等),strategies为运行策略。
以阿里云网页为例,将复制得到bookmarklet code粘贴到console面板运行,可得到如下图所示的运行截图。
左侧主窗口红色边框为操作范围,右侧console面板打印Monkey测试结果。Mogwai fps表示每秒监视的帧数。
2)gremlins.js和selenium结合
为了实现自动化脚本控制,我们可以采取gremlins.js和selenium相结合的模式。
将gremlins.js的bookmarklet code引入脚本,使用selenium的控制器触发浏览器操作。核心代码片段如下图所示:
触发运行图如下所示:
效果如何?
使用gremlins.js的bookmarklet可以很直观地观察到监控窗口中地频繁操作,如点击、输入、触摸等。由此频繁操作引发的问题和错误,也会打印到console窗口,便于排查。
但是,该方法虽然能捕获某些错误,但由于频繁地随机操作和错误输出,导致无法判定相关操作,以及错误真伪。例如:在console捕捉到错误,但无法准确定位操作来源。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!