Monkey测试工具大盘点!如何选怎么用全整明白了!

news2024/10/13 0:35:41

什么是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捕捉到错误,但无法准确定位操作来源。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理解Web3的互操作性:不同区块链的连接

随着Web3的迅速发展,互操作性成为区块链技术中的一个核心概念。互操作性指的是不同区块链之间能够无缝地交流和共享数据,从而实现更加高效和灵活的生态系统。本文将探讨Web3中互操作性的意义、面临的挑战以及未来的发展趋势。 1. 互操作性的意义 在Web…

优达学城 Generative AI 课程3:Computer Vision and Generative AI

文章目录 1 官方课程内容自述第 1 课:图像生成简介第 2 课:计算机视觉基础第 3 课:图像生成与生成对抗网络(GANs)第 4 课:基于 Transformer 的计算机视觉模型第 5 课:扩散模型第 6 课&#xff0…

利用AI大模型,增强你的DevOps!

前言 自从去年春天ChatGPT问世之后,互联网也掀起了拥抱AI的浪潮,不仅是各大头部大厂相继发布大模型产品,在开发者的Coding过程中也紧跟时代,一些热门插件也纷纷受到了开发者的青睐,比如GitHub Copilot的智能代码生成。…

数据结构编程实践20讲(Python版)—05二叉树

本文目录 写在前面:大“树”下好乘凉定义主要术语基本特征主要应用领域:05 二叉树Binary treeS1 说明S2 示例S3 二叉树类型(1)满二叉树(Perfect Binary Tree)(2)完全二叉树(Complete Binary Tree)(3)二叉搜索树(Binary Search Tree)(4)平衡二叉树(Balanced Bin…

Windows环境NodeJS下载配置安装运行

Windows环境NodeJS下载配置安装运行 (1)下载 Node.js — Run JavaScript Everywhere 安装文件。 一路傻瓜式安装。 如果安装正常,输入命令可显示版本号: (2)可以查询nodejs默认的后续依赖安装包位置及缓存…

稻盛和夫认为,一个领导是否值得追随,看这几点就够了

一、真正的领导者有自信,但不自大,有坚定的信念和价值观。 稻盛和夫认为,领导者的真正强大之处在于他们能够坚定地做正确的事情。领导者必须具备勇气和决心,以及坚定的信念,以便在面对挑战和困难时能够坚持自己的信念…

Vert.x,Web - 静态资源/模板

静态资源 Vert.x-Web带有开箱即用的处理器(StaticHandler),用于处理静态Web资源(.html, .css, .js, …), 因此可以非常轻松地编写静态Web服务器。 默认静态文件目录为类路径下的webroot目录,对于maven的项目,按规范放在src/main/…

BIO与NIO学习

BIO:同步阻塞IO,客户端一个连接请求(socket)对应一个线程。阻塞体现在: 程序在执行I/O操作时会阻塞当前线程,直到I/O操作完成。在线程空闲的时候也无法释放用于别的服务只能等当前绑定的客户端的消息。 BIO的代码实现 …

郑光荣参加老年春节联欢晚会团长会议现场采访

郑光荣作为北京正明圣达叫卖团的业务团长,他不仅在多个春节联欢晚会中展现了 自己的才华,还在团长会议现场接受了采访。在2024年参加了多个电视台的 春节联欢晚会录制。 郑光荣曾经参与了包括北京广播电视台、海南卫视,中国国际教育电视台…

c++基础-去掉空格

#include <algorithm> #include <string> #include <cctype> // 用于std::isspace std::string removeSpaces(std::string str) {str.erase(std::remove_if(str.begin(), str.end(), ::isspace), str.end());return str; }int main() {string str &quo…

腾讯云视立方Flutter 相关

两台手机同时运行 Demo&#xff0c;为什么看不到彼此的画面&#xff1f; 请确保两台手机在运行 Demo 时使用的是不同的 UserID&#xff0c;TRTC 不支持同一个 UserID &#xff08;除非 SDKAppID 不同&#xff09;在两个终端同时使用。 防火墙有什么限制&#xff1f; 由于 SDK…

visual studio使用ssh连接linux虚拟机运行程序

1.vs安装linux组件 2.安装后新建项目 新建后会有一个使用指南 设置网络为桥接网卡后打开虚拟机 使用vs提升的那句话安装工具 sudo apt-get install openssh-server g gdb gdbserver 重启ssh服务 sudo service ssh restart 接着进去打开ssh端口 sudo vi /etc/ssh/sshd_config …

安装rstudio-server

主要教步骤参考https://posit.co/download/rstudio-server/ 1&#xff0c;首先是linux发行版版本要求&#xff1a;符合 2&#xff0c;预装R&#xff1a;符合 3&#xff0c;安装rstudio-server 4&#xff0c;但是发现web上8787端口打不开&#xff1a; RStudio Server 可能没有在…

不会大模型不要紧!只需5分钟!你也可以微调大模型!如何快速微调Llama3.1-8B

AI浪潮席卷全球并发展至今已有近2年的时间了&#xff0c;大模型技术作为AI发展的底座和基石&#xff0c;更是作为AI从业者必须掌握的技能。但是作为非技术人员&#xff0c;相信大家也有一颗想要训练或微调一个大模型的心&#xff0c;但是苦于技术门槛太高&#xff0c;无从下手。…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”&#xff08;或标准内置对象&#xff09;不应与 global 对象混淆。这里的“全局…

【Canvas与标牌】内凹圆角矩形排列组合标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>内凹圆角矩形Draft3排列组合标牌</title><style type"…

云轴科技ZStack邀您参加迪拜GITEX 2024,10月14日不见不散

云轴科技ZStack期待在GITEX GLOBAL 2024与您相遇&#xff0c;共同探索科技的未来。 10月14日至18日&#xff0c;ZStack将携最新的云计算解决方案与AIOS智塔平台&#xff0c;亮相全球顶尖科技盛会——GITEX GLOBAL 2024 展览会&#xff0c;展位Hall 8-C20&#xff0c;向全球观众…

Git客户端使用之TortoiseGit和Git

git客户端有两个分别是TortoiseGit和Git Git用于命令行TortoiseGit用于图形界面。无论是Git还是TortoisGit都需要生成公/私钥与github/gitlab建立加密才能使用。 一、先介绍Git的安装与使用 1、下载与安装 安装Git-2.21.0-64-bit.exe(去官网下载最新版64位的)&#xff0c;安…

阿里P8面试官推荐学习的11大专题:java面试精讲框架文档

本篇文章给大家分享一波&#xff0c;阿里P8面试官推荐学习的11大专题&#xff1a;java面试精讲框架文档&#xff0c;主要包含11大块的内容&#xff1a;spring、springcloud、netty、zookeeper、kafka、Hadoop、HBASE、Cassandra、elasticsearch、spark、flink&#xff1b;希望大…

抢先体验上海交大最新大模型Agent心理诊所!论文一作深度解读角色扮演Agent前沿进展

在当今社会的快节奏生活下&#xff0c;人们对于心理健康的关注度也在持续提升。然而&#xff0c;如今的心理健康医疗资源明显不足&#xff0c;尤其是在低收入和中等收入国家。同时&#xff0c;相关医疗资源的分布也主要集中在城市和大型机构&#xff0c;这种分配不平衡导致大量…