APP稳定性测试工具:Monkey

一、Monkey 简介

Monkey 是一款 app 的自动化测试工具,monkey 是猴子的意思,所以从原理上说,它的自动化测试就类似猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱。Monkey 原理也是类似,通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、滑动 Trackball、手势输入等操作),来对设备上的程序进行测试,检测程序长时间的稳定性,多久的时间会发生异常。

Monkey 工具存在 Android 系统中,使用 Java 语言写成,jar 包在 Android 文件系统中的存放路径是:
/system/framework/monkey.jar;Monkey.jar 程序是由一个名为"monkey"的 Shell脚本来启动执行,shell 脚本在 Android 文件系统中的存放路径是:/system/bin/monkey;monkey 需要通过 adb 来唤醒,即通过在 cmd 窗口中执行: adb shell monkey {+命令参数}来进行 Monkey 测试;

二、Monkey 工作原理

在 Monkey 运行的时候,它会生成事件,并把它们发给系统。同时,Monkey 还对测试中的系统进行监测,对下列三种情况进行特殊处理:

(1)如果限定了 Monkey 运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止;
(2)如果应用程序崩溃或接收到任何失控异常,Monkey 将停止并报错;
(3)如果应用程序产生了应用程序不响应 ANR(application not responding)的错误,Monkey 将会停止并报错;按照选定的不同级别的反馈信息,在 Monkey 中还可以看到其执行过程报告和生成的事件。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、Monkey 命令基本参数介绍

0、--help : 列出简单的用法

adb shell monkey -help

1、允许启动手机里面所有的 App , 随机操作 1000 次

adb shell monkey 1000

2、-p : 允许启动 App 的包名

启动一个包名的应用,QQ 的包名为: com.tencent.mobileqq

案例:随机操作 手机 QQ 1000 次

#获取App的包名,先启动qq并获取焦点
adb shell dumpsys window | findstr mCurrentFocus
#启动App
adb shell monkey -p com.tencent.mobileqq 1000
启动指定的多个 App,微信的包名为:com.tencent.mm

案例:随机操作 手机 QQ 和 微信 1000 次

adb shell monkey -p com.tencent.mobileqq -p com.tencent.mm 1000

3、-v : 操作日志记录

命令行的每一个-v将增加反馈信息的级别。

-v:Level 0(缺省值)除 启动提示、测试完成和最终结果之外,提供较少信息。
-v -v :Level 1提供较为详细的测试信息,如逐个发送到Activity的 事件。
-v -v -v :Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
adb shell monkey -p com.tencent.mobileqq -v -v -v 100

4、-s : 伪随机数生成器的seed值

如果用相同的seed值再次运行monkey,将生成相同的事件序列。

adb shell monkey -p com.tencent.mobileqq -s 12345 -v 10

5、--throttle : 插入固定延迟

在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被执行。

案例:随机执行 500 个事件,每个事件之间延迟 500 毫秒被执行。

adb shell monkey -p com.tencent.mobileqq ---throttle 500 -v 500

6、--ignore-crashes : 忽略操作是崩溃异常

通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

adb shell monkey -p com.tencent.mobileqq ---ignore-crashes -v 1000

7、--ignore-timeouts : 忽略超时

通常,应用程序发生任何超时错误(如"Application Not responding"对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

adb shell monkey -p com.tencent.mobileqq ---ignore-timeouts -v 1000

8、
--ignore-security-exceptions : 忽略程序发生许可异常

通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

adb shell monkey -p com.tencent.mobileqq---ignore-security-exceptions -v 1000

9、调整触摸事件百分比

触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。

#调整触摸事件百分比为100%
adb shell monkey -p com.tencent.mobileqq -v -v --pct-touch 100 200

10、调整手势事件百分比

#调整手势占比为100%
adb shell monkey -p com.tencent.mobileqq -v -v --pct-motion 100 200

11、调整应用启动事件的百分比

如果你希望调整应用启动事件的百分比。

--pct-appswitch:后面接应用启动事件百分比。
adb shell monkey -p com.tencent.mobileqq --pct-appswitch

12、调整屏幕旋转事件百分比

--pct-rotation 后面接屏幕旋转事件的比例值。
adb shell monkey -p com.tencent.mobileqq --pct-rotation

Monkey弱点:

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,不支持读取待测界面的信息来执行验证操作

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

相关推荐
Devil枫5 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
awonw8 小时前
[java][框架]springMVC(1/2)
测试工具·postman
茶馆大橘8 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
钱钱钱端10 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
小袁在上班11 小时前
Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
python·单元测试·log4j
测试199811 小时前
外包干了2年,快要废了。。。
自动化测试·软件测试·python·面试·职场和发展·单元测试·压力测试
迃幵chen12 小时前
wireshark-网络分析工具
网络·测试工具·wireshark
孤蓬&听雨14 小时前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
土小帽软件测试14 小时前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习
安冬的码畜日常15 小时前
【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介
笔记·学习·单元测试·jest