嚴華 发表于 2024-8-4 20:52:04

Android Monkey工具介绍与使用



https://img-blog.csdnimg.cn/direct/ec89a1025dc5448c8c9063e071e1e28f.png

        过于爽快的承认失败,就可能发觉不了曾经与正确非常接近。大家好,仍然是在翻看旧文档的时间,发现一篇关于Monkey的介绍和使用,Monkey这款工具在软件测试中重要用于进行压力测试和稳定性测试。它可以模拟大量随机的用户操作,对应用程序进行长时间的高强度测试,以发现潜在的稳定性问题、瓦解问题以及其他异常情况。通过 Monkey 测试,可以在肯定程度上评估应用在极度情况下的表现。


Monkey介绍

什么是Monkey

        Monkey是Android系统自带的一个命令行工具,可以在Android模拟器或手机设备中运行。通过向Android系统发送伪随机用户事件流(如屏幕的点击、滑动和系统按键操作等),实现对Android App进行稳定性测试。

Monkey的特点

我们可以在CMD命令行或adb shell命令行执行命令,根据一个特定命令来发送信息。
使用Monkey执行测试,具有如下特点:
(1)假如限定了Monkey运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止。
(2)假如应用程序瓦解或吸收到任何失控异常,或程序无相应(application not responding),Monkey将记录对应的错误日记,并根据命令行参数判定是停止运行还是继续运行。
(3)按照选定的差别级别的反馈信息,在Monkey中还可以看到其执行过程陈诉和生成的事件。
(4)不支持条件判定,也不支持读取待测界面的UI值来执行验证和操作。

Monkey的介入时间

等产物比较稳定,没有明显或很多bug的时间,再使用Monkey进行稳定性测试。

Monkey操作

基本操作步骤


[*]启动手机(真机大概假造机都可以),在其中安装要测试的应用。比方:百度地图。
[*]执行monkey命令
[*]进入手机系统(adb shell,如有多台设备必要指定设备 -s参数)
[*]毗连设备(adb connect 设备ID)
[*]打开CMD命令行窗口
Monkey命令示例

        在模拟器上安装百度地图,可手动打开并打开地图表现页。打开CMD命令行执行adb shell进入 Linux命令行界面。执行如下命令,可看到Monkey的随机操作效果。
monkey -p com.baidu.BaiduMap --ignore-crashes --ignore-timeouts --ignore-native-crashes  --pct-motion 39 --pct-pinchzoom 34 --pct-trackball 20 --pct-touch 7 -s 1 -v -v -v --throttle 200 20000         除了上面执行方式外,也可以不进入adb shell,在DOS命令行直接执行adb shell monkey命令。如下:
adb shell monkey -p com.baidu.BaiduMap --ignore-crashes --ignore-timeouts --ignore-native-crashes  --pct-motion 39  --pct-pinchzoom 34 --pct-syskeys 0 --pct-trackball 20 --pct-touch 7  -s 1 -v -v -v --throttle 200 20000 强制关闭monkey

        假如我们运行之后发现设置错误,运行了别的应用,必要中断monkey测试过程;大概monkey在运行测试中出现故障,必要中断进程,怎么实现呢?

根据monkey进程的启动方式,分为以下两种情况:

[*]monkey进程通过CMD命令行直接执行adb shell monkey启动:
[*]monkey进程通过先执行adb shell,进入Linux环境再执行monkey命令启动。

在第一种情况下,采用如下方式终止Monkey进程:
打开一个新的CMD窗口,输入命令:
adb shell ps |findstr "monkey" 查出com.android.commands.monkey 进程记录,记录其进程号(pid).
adb shell kill 进程号 杀掉monkey进程
https://img-blog.csdnimg.cn/direct/f110511a2a3a4a1ca8e75eec5fe733a0.png
在第二种情况下,结束Monkey进程则比较简朴,直接Ctrl+C即可结束Monkey进程运行。

Monkey命令和参数

monkey 程序组成

1、Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
https://img-blog.csdnimg.cn/direct/872d2e6ea2b24d5a83a46be62f8a6951.png
2、Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;
https://img-blog.csdnimg.cn/direct/320e9e55a2af4942ade3c72c77eebbd5.png
monkey命令资助

命令:
adb shell monkey -help    运行效果:如下图。
https://img-blog.csdnimg.cn/direct/7c9c3b26519148bf825531f0d4c51d6a.png
Monkey命令参数

monkey基本参数

-p
 参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)
 不指定-p参数的话会对整机进行测试,即对全部APP进行测试。

-s
 用于指定伪随机数生成器的seed值,假如seed相同,则两次Monkey测试所产生的事件序列也相同。
 执行monkey所产生的事件顺序,相称于一个flag,设置这个参数是为了更好地复现Bug。
 Seed值假如不指定,系统会自动生成
 seed值取值范围:1~9223372036854775807 (2的63次方-1)
如:
adb shell monkey -p com.test -v -s 10 100 第一次运行时出现了bug,但从日记也看不出来什么,再运行一次
adb shell monkey -p com.test -v -s 10 100 它的事件执行顺序与上一次相同,这样就有利于你发现产生bug的地方了。
-v  日记级别
Level 0 
示例:
adb shell monkey -p com.baidu.BaiduMap -v 100 阐明:仅提供启动提示、测试完成和终极效果等少量信息
Level 1
示例:
adb shellmonkey -p com.baidu.BaiduMap -v -v 100 阐明:提供较为具体的日记,包罗每个发送到Activity的事件信息
Level 2
示例:
adb shellmonkey -p com.baidu.BaiduMap -v -v -v 100 阐明:最具体的日记,包罗了测试中选中/未选中的Activity信息

adb shell monkey  --throttle 3000 100  --randomize--throttle
联合--throttle使用,随机耽误范围为0到throttle指定的时间
示例:
adb shell monkey --throttle 3000 --randomize-throttle 100
 --pkg-whitelist-file 白名单
 只执行在白名单中的apk
 把设置的白名单的包写入到一个txt文档内里(文档和路径名不能有中文)
 假如想指定多个程序被执行,则在文件中添加多个包名,注意包名与包名之间均用回车键换行。
 把这个文件放入到安卓手机中,放在/data/local/tmp下面:
adb push D:\whitelist.txt /data/local/tmp   

adb shell monkey --pkg-whitelist-file /data/local/tmp/whitelist.txt 200 --pkg-blacklist-file 黑名单
 执行除了黑名单中以外的apk
 设置方法和白名单类似,把文件名改为blacklist
 示例:
adb shell monkey --pkg-blacklist-file /data/local/tmp/blacklist.txt 200   
--ignore-crashes
 用于指定当应用程序瓦解时(Force& Close错误),Monkey是否停止运行。
 假如使用此参数,即使应用程序瓦解,Monkey依然会发送事件,直到事件计数完成。

--ignore-timeouts
忽略应用程序发生ANR(Application No Responding)错误时,直到事件数执行完成
--ignore-native-crashes
忽略本地代码造成的瓦解,直到事件数执行完成
--ignore-security-exceptions count
 应用程序权限错误发生后继续发送事件
 假如你希望monkey在应用程序权限错误发生后继续发送事件,则必要用到--ignore-security-exceptions选项。
 假如不设置此选项,monkey碰到此类权限错误将停止运行
随机事件个数,必填项

Monkey事件百分比参数

--pct-事件名称 百分比(用0-100的整数表示)

--pct-touch     触摸事件,点击事件的百分比。编号为:0
--pct-motion 动作事件,设定移动事件百分比,直线滑动。编号为:1
--pct-pinchzoom 缩放事件百分比,比如放大或者缩小的操作。编号为:2
--pct-trackball 轨迹球事件百分比,不常用。编号为:3。现在手机基本没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序中需要曲线滑动时可以使用此参数
--pct-rotation     屏幕旋转事件百分比,横屏竖屏。编号为:4
--pct-nav     基本导航事件百分比。编号为:5 包括上下左右,如方向输入设备的输入,老人机的上下左右键,智能机上没有
--pct-majornav 主要导航事件百分比。号为:6例如中间键,回退键,菜单键
--pct-syskeys     系统按键事件百分比。编号为:7这些按钮一般专供系统使用,如:Home,Back,Start Call,End Call,音量控制
--pct-appswitch  Activity启动事件百分比/调整APP切换事件的百分比。编号为8
--pct-flip     键盘翻转事件百分比/键盘的隐藏,出现。编号为9
--pct-anyevent 其他事件百分比。编号为10如按键,在其他设备上不常用的按钮等 注意:
1.假如不添加任何事件百分比参数,系统将在各种事件中随机分配比例;
2.全部事件百分比相加应小于便是100,若小于100,则剩余比例将随机分配;
3.手动设置时如何分配比例,要根据应用类型决定。


Monkey日记管理

        我们使用Monkey进行测试,目的是测试应用的稳定性,在运行时是否发生了诸如瓦解或无相应的问题。Monkey通过日记来记录执行过程以及其中的堕落信息。默认情况下,Monkey日记打印在命令行窗口(Windows CMD窗口或adb shell窗口),表现范围有限,内容比较多的时间,无法查看先前生成的内容。而且,假如关闭了命令行窗口日记就丢失了。所以我们要处理的第一个问题,就是日记的生存。
monkey日记生存

        Monkey运行日记可以生存在PC中,也可以生存在移动设备(或模拟器)上。而且生存在手机上时,可以将标准流和错误流分开生存。
1、生存在PC中
前提是Monkey测试在PC端执行,命令格式如下:
adb shell monkey [选项参数] 事件数 >Windows文件全路径 此时全部信息输出到一个日记文件。比方:
adb shell monkey -p com.baidu.BaiduMap -v -v -v --throttle 200 100 >d:\monkey.log
2、生存在移动设备(或模拟器)上
        前提是Monkey测试在移动设备(或模拟器)执行,先通过执行adb shell进入设备中。   有两种生存方式:
标准信息、错误信息生存在同一个文件,命令格式如下:
monkey [选项参数] 事件数 1>Linux文件全路径 2>&1 比方:
monkey -p com.baidu.BaiduMap -v -v -v --throttle 200 100 1>/sdcard/monkey.log 2>&1  标准信息、错误信息分开生存在两个文件,命令格式如下:
monkey [选项参数] 事件数 1>Linux文件全路径 2>Linux文件全路径  比方:
monkey -p com.baidu.BaiduMap -v -v -v --throttle 200 100 1>/sdcard/monkey_std.log     2>/sdcard/monkey_error.log
Monkey日记分析

        Monkey日记分析是Monkey测试中非常紧张的一个环节,通过日记分析,可以获取当前测试对象在测试过程中是否发生异常,以及发生的概率,同时还可以获取对应的错误信息,资助开发定位息争决问题。
Monkey日记详解

Monkey日记由以下几部分组成:
1、测试命令信息:包罗随机种子、事件总数、答应测试包和使用的Activity、各事件百分比。。
 2、App切换和Activity跳转:可以看到切换到了哪个App,从哪个Activity跳转到了哪个Activity,假如发生了异常,就可以看出是在哪个App和Activity中发生的。
3、伪随机事件流:各种随机事件。
4、异常信息:应用瓦解、无相应等异常相应信息。
5、测试效果信息:完成事件数、其他信息。
https://img-blog.csdnimg.cn/direct/4ae48a4206b54256ac951e67fc7de455.pnghttps://img-blog.csdnimg.cn/direct/6da3b0a562b648c0a6436f7394459e4b.pnghttps://img-blog.csdnimg.cn/direct/0c3d6f41e37b4b18bd5f64067624f3ee.png

App切换和Activity跳转
        可以看到切换到了哪个App,从哪个Activity跳转到了哪个Activity,假如发生了异常,就可以看出是在哪个App和Activity中发生的。
注:在答应一次测试多个应用时,会看到多次App切换;只测试一个应用时,一般只看到一次App切换,除非应用异常后重启。
https://img-blog.csdnimg.cn/direct/bbba18327c714345b1be5b88612d5b01.pnghttps://img-blog.csdnimg.cn/direct/54cda722276a4e5c8e05757031bec205.pnghttps://img-blog.csdnimg.cn/direct/212af494e6344b17832de2c1df8f7674.png

伪随机事件流
记录各种随机操作及中间的耽误时间,重要是以下几种操作:   
touch 触摸操作
https://img-blog.csdnimg.cn/direct/281f400a09d04178833dc32ee5afb4c6.png
motion 滑动操作
https://img-blog.csdnimg.cn/direct/cdd22d1b3fe342d9a05a2a19e02232db.png
trackball 曲线滑动操作
https://img-blog.csdnimg.cn/direct/899f605164b54c8d88f8ab5d3c492c9c.png
pinch-zoom 缩放操作
https://img-blog.csdnimg.cn/direct/985ba2a872f24b93bddb313fa77bf519.png
rotation 旋转操作
https://img-blog.csdnimg.cn/direct/36ba027a38c94d75ac3a0b4d5808a218.png
异常信息
应用无相应、瓦解等异常信息
应用无相应时信息:
https://img-blog.csdnimg.cn/direct/013f7a1021cc4117bf95e8ce0de9f26b.png
瓦解信息:
https://img-blog.csdnimg.cn/direct/6c8db26870b64a6eabc5f337a3ba6b69.png
测试效果信息
完成事件数、其他信息              
完成事件数:
https://img-blog.csdnimg.cn/direct/d8b828ece7c8418592dc574d0d30539c.png
其他信息:
https://img-blog.csdnimg.cn/direct/c6783359054640159d83fd9508de69b6.png
从日记中发现并提交bug

        使用Monkey进行测试结束后,我们关注的是应用在测试中是否出现瓦解或无相应这类问题。测试效果可以通过如下方法判定:
(1)在日记中搜索“CRASH”,假如搜到,可以判定App在测试过程中发生过瓦解(闪退)问题;
(2)在日记中搜索“ANR”,假如搜到,可以判定App在测试过程中发生过无相应的问题;
        我们可以把这些关键字,连同其上下文,包罗Java异常信息和其他相干信息一起提交。其中,Java异常信息重要有以下类型:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
违法访问错误:IllegalAccessError
内存不敷错误:OutOfMemoryError
堆栈溢堕落误:StackOverflowError

注意:长时间运行Monkey时,产生的日记文件非常巨大,用记事本无法打开,可以使用如Notepad++或UltraEdit之类的流式读取的编辑器打开。
ANR异常和traces.txt文件

        Monkey日记中ANR相干信息不够具体,当发现APP运行中存在ANR问题时,我们还必要使用adb pull命令从被测设备的/data/anr目录下导出名为traces.txt的对应log文件,一并交给开发人员排查问题。命令如下:
adb pull /data/anr/traces.txt  D:\logs\ adb logcat 查看Android系统日记(logcat日记)

        使用monkey进行测试时,还要注意logcat日记。这是Android系统日记,包含更具体的内容,可以资助开发人员定位问题。假如要获取logcat日记,必要在执行monkey测试前开始记录logcat日记。完整步骤如下:
① adb logcat -c 清理现有日记
② adb logcat -v time > D:\logcat.log 开始记录日记
③ 运行monkey程序  
运行monkey程序结束后,可以把logcat日记文件logcat.log也提交给开发作为定位问题的参考。
复现问题

        假如必要复现问题,可以在日记中找到其时执行的seed值,再构建monkey命令运行反复。构建命令时,seed值自定义,定义成与第一次运行相同。程序运行的初始界面也跟第一次运行相同。
        后续回归问题也用同一个命令,seed值保持相同。 假如问题不易复现,必要多运行反复,或多运行一段时间。
别的,还应保持初始界面、网络条件、位置、运行时长一致。
一次测试发现多个问题

        monkey 执行时假如加了--ignore-crashes和--ignore-native-crashes,App出现瓦解退出后,还会自动重启并继续发送事件(否则monkey中断)。我们可以等monkey进程结束后,去日记里直接搜索CRASH。可能会看到多处问题。所以加这两个选项可以资助我们在一次测试中发现多处瓦解问题。
        monkey 执行时假如加了--ignore-timeouts,App出现无相应后还会继续发送事件;我们可以等monkey进程结束后,去日记里直接搜索ANR,可能会看到多处问题。所以加这个选项可以资助我们在一次测试中发现多处无相应的问题。
上述三个选项都加,则可能在一次测试中发现多处CRASH或ANR问题。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android Monkey工具介绍与使用