Monkey测试工具详解

Monkey测试工具简介:

  • Monkey是Android SDK 中附带的一个工具;Monkey测试的原理:利用socket通讯(Android客户端和服务器以TCP/UDP方式)的方式来模拟用户的按键输入、触摸屏输入、手势输入等;
  • Monkey测试的目的:该工具可进行压力测试,更多的是一种随机测试和稳定性测试,测试安卓系统APP的健壮性和稳定性;

特征:

  • 测试的对象仅为应用程序包,有一定的局限性。
  • 可对MonkeyTest的对象、事件数量、类型、频率等进行设置
  • Monkey测试使用的事件流数据流是随机的,不能进行自定义。
    【如果需要自定义可以试试monkeyrunner工具,它是在工作站上通过API定义的特定命令和事件控制设备或模拟器。您可以写出一个Python程序去安装一个Android应用程序或测试包;运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。】

Monkey测试环境配置

1、下载AndroidSDK:https://android-sdk.en.softonic.com/

在这里插入图片描述
在这里插入图片描述
2、配置AndroidSDK环境变量:

path= F:\monkey\AndroidSDK_platform-tools

在这里插入图片描述
3、检查android-sdk配置是否正确,检查adb版本:

C:\Users\MECHREVO>adb –version

在这里插入图片描述
出来上图蓝色线的内容说明正确。

4、安装Mumu模拟器:http://mumu.163.com/

在这里插入图片描述
5、下载mumu后,安装的时候直接安装就好

在这里插入图片描述
在这里插入图片描述
6、安装成功后,打开mumu模拟器,然后在尝试连接mumu模拟器

7、打开dos窗口,输入以下命令

C:\Users\Administrator>adb devices	//查看已连接的设备
C:\Users\Administrator>adb connect 127.0.0.1:7555	//连接mumu模拟器
C:\Users\Administrator>adb devices	//查看mumu是否连接成功
//127.0.0.1:7555  device	出现这个说明连接成功

在这里插入图片描述
8、在网上随便下载了一个apk文件到本地

在这里插入图片描述
9、进行安装这个apk文件到模拟器

C:\Users\Administrator>adb install F:\monkey\demo.apk
Performing Push Install
F:\monkey\demo.apk: 1 file pushed. 7.3 MB/s (4743475 bytes in 0.618s)
        pkg: /data/local/tmp/demo.apk
Success

C:\Users\Administrator>

在这里插入图片描述
如果最后提示‘Success’,说明安装成功。

如果在程序测试过程中,开发那边改完一阶段bug或一个严重程度级别很高的bug,我们在安装新的apk的时候不用去卸载原来的apk,只要重新安装的时候加上‘-r’参数覆盖掉原apk文件就好:

C:\Users\Administrator>adb install -r F:\monkey\demo.apk

10、在F:\monkey这个目录下创建一个目录,名为‘monkeylog’,用来保存monkey测试产生的日志文件,需要用日志文件进行分析问题。

执行Monkey测试

11、执行monkey测试,命令如下(操作事务都是随机的)

C:\Users\Administrator>adb shell monkey -p com.One.WoodenLetter -s 1599897777753 --throttle 300 -v -v -v 1000 > F:\monkey\monkeylog\mon1.txt

在这里插入图片描述
12、在包名的后面加上两个参数(操作事务只有点击和滑动事件)

C:\Users\Administrator>adb shell monkey -p com.One.WoodenLetter --pct-touch 70 --pct-motion 30 --throttle 300 -v -v -v 1000 > F:\monkey\monkeylog\mon6.txt

在这里插入图片描述
13、上面的命令中用到了–pct-touch和–pct-motion;

–pct-touch 70: ‘点击’事件占所有事件的70%
–pct-motion 30: ‘滑动’事件占所有事件的30%
//两个加起来是100,代表不会进行其他事件操作,如轨迹事件,导航事件等等,指定这两种操作后,就极大的降低了monkey点到被测app外面的概率(触发到音量键等系统按键)

-p: 指定包(指定测试的app)
–throttle: 两个事务间的时间间隔
-v -v -v: 日志输出等级3个v最高,1个v最低
1000: 操作事务次数1000次
> F:\monkey\monkeylog\mon6.txt: 产生的日志文件保存到mon6.txt文件里面

14、卸载apk需要先找到包名(卸载apk文件,或者直接在模拟器中卸载)

可先通过下面的命令列出所有的包,包都是以‘com’开头的

C:\Users\Administrator>adb shell pm list packages

在这里插入图片描述
列如上面安装的apk,它的包名是com.One.WoodenLetter

15、卸载com.One.WoodenLetter包,命令如下

C:\Users\Administrator>adb shell pm uninstall -k com.One.WoodenLetter

在这里插入图片描述
出来‘Success’说明卸载成功。

问题定位分析

  • 从日志中搜索:exception、crash、Fatal、ANR 这4个关键词。monkey的错误一般都是这4个,异常,崩溃,致命,程序终止。找到错误关键后,可以分析下错误发生前的操作步骤,便于手动重现错误。也可以将测试日志给安卓开发看,便于更快更准的定位问题。

  • 测试执行后打开测试日志,发现开头会有一个seed值,下次执行monkey测试的时候可以带上这个参数‘-s 1599897777753’,那么下次执行的时候会跟上一次的执行事务一样
    :Monkey: seed=1599897777753 count=1000

  • 测试日志中Event percentages事务百分比分别是什么事务
    不同版本的Android SDK的Event percentages种类数和顺序是不一样的!

0:–pct-touch//touch events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:–pct-motion//motion events
percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:–pct-pinchzoom//pinch zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:–pct-trackball//trackball events
percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
4:–pct-rotation//screen rotation events percentage屏幕旋转百分比,横屏竖屏
5:–pct-nav//nav events
percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
6:–pct-majornav//major nav events
percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
7:–pct-syskeys//system(key) operations
percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End
Call,音量控制) 8:–pct-appswitch//app switch events
percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:–pct-flip//keyboard flip
percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:–pct-anyevent//anyevents
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

  • 测试执行结束后,打开日志最后查看最后5行信息

Events injected: 1000
//执行事务次数:1000次

:Sending rotation degree=0, persist=false
//对屏幕旋转事件的旋转度数=0,没有执行旋转事务

:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
//丢弃的数据包:键=0,指针=0,轨迹球=0,键盘点击=0,屏幕翻转=0

## Network stats: elapsed time=71424ms (0ms mobile, 0ms wifi, 71424ms not connected)
//网络统计信息:运行时间=71424ms(手机 0ms,wifi 0ms,未连接 71424ms)

// Monkey finished //monkey 测试结束

补充说明

  • 各个模拟器的连接端口

在这里插入图片描述

  • 也可以直接在模拟器里面直接添加apk文件,或应用中心下载,就不需要再dos中去安装了。

在这里插入图片描述

  • Monkey测试运行中的停止条件

1、如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

2、如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错,例如app为强制更新或者app的运行环境被停止。

3、如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错

  • 在连接模拟器的时候如果出现了一些觉得应该不会出现的错误(如下图1),可以打开任务管理器,找到adb.exe进程右键结束进程重新打开cmd输入adb devices

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

命令详解

在这里插入图片描述

  • -p 指定要进行monkey测试的包,如果不使用参数,则会随机选择一个应用进行测试,也可以选中多个测试包一起运行
  • -c 指定activity的category类别,可以有多个
  • –throttle 设置每个事件结束后延迟多少时间再继续下一个事件,降低cpu压力;如果不设置,事件与事件之间将不会延迟,事件将会尽快生成;一般设置300ms,因为人最快300ms左右一个动作
  • -v 指定日志级别 -v level1 -v -v level2 -v -v -v level3,level3会输出最详细的日志信息
  • -s 伪随机的事件seed值,可以通过-s参数复现问题,不指定就会随机生成,日志中第一行会有
  • –ignore-crashes 忽略异常崩溃
  • –ignore-timeouts 忽略ANR(忽略应用无响应错误)
  • –ignore-security-exceptions 忽略一些许可错误,比如证书许可,网络许可
  • –monitor-native-crashes 监视并报告native(原生程序)层发送的崩溃错误
  • –ignore-native-crashes 忽略native(原生程序)层代码的崩溃错误
  • –kill-procress-after-error 用于在发送错误后杀死进程
  • –hprof 设置后,在Monkey事件序列之前和之后立即生产分析报告,保存于data/mic目录,不过将会生成大量几兆文件,谨慎使用
  • –pct-touch 设置触摸事件的百分比,即手指对屏幕进行点击抬起的动作
    例如‘–pct-touch 30%’
  • –pct-motion 设置移动(滑动)事件百分比,即点击屏幕,然后直线运动,最后抬起这种运动。
  • –pct-trackball 设置轨迹球事件百分比,这种事件类型是一个或者多个随机移动,包含点击事件,这里可以是曲线运动,不过现在手机很多不支持,这个参数不常用
  • –pct-syskeys 设置系统物理按键事件百分比,比如home键,音量键,返回键,拨打电话键,挂电话键等
  • –pct-nav 设置基本的导航按键事件百分比,比如输入设备上的上下左右四个方向键,不常用
  • –ptc-majornav 设置主导航事件的百分比
  • –pct-appswitch 设置monkey使用startActivity进行activity跳转事件的百分比,保证界面的覆盖情况
  • –pct-flip 键盘(手机键盘)事件主要是一些与键盘相关的操作的百分比。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等,这里主要是键盘的打开和关闭操作
  • –ptc-anyevent 设置其它事件百分比
  • –pct-pinchzoom 调整缩放事件的百分比
  • –pct-permission 权限(替换掉了老版本中的–pct-rotation 屏幕旋转)
  • –pkg-blacklist-file 不去测试执行某个路劲下的程序包,–pkg-blacklist-file后面接的参数是apk文件的路径,查看某个包的路径:C:\Users\MECHREVO>adb shell pm list packages -f
    比如com.One.WoodenLetter包的位置在:
    /data/app/com.One.WoodenLetter-1/base.apk

在这里插入图片描述

  • –pkg-whitelist-file 设置白名单,即只执行的apk应用,作用和-p参数一样,注意,黑白名单只能设置其中一种,即不能同时既设置黑名单,又设置白名单,–pkg-whitelist-file后面接的是apk文件的路径,和上面一个一样
    adb shell monkey – pkg-whitelist-file /data/local/tmp/whitelist.txt --throttle 200 300 这个命令的意思就是 只跑白名单里面的应用,延迟200毫秒 执行300次
  • –wait-dbg 停止执行中的Monkey,直到有调试器和它相连接,后面可以不加参数值
  • –dbg-no-events 设置此选项,Monkey将执行初始启动,进入一个测试Activity,并不会在进一步生成事件。为了得到最佳结果,结合参数-v,一个或多个包的约束,以及一个保持Monkey运行30秒或更长时间的非零值,从而提供了一个可以监视应用程序所调用的包之间转换的环境
  • –port 为monkey开启专用端口。此时只monkey不会帮你乱点击,而此时你自己就是一只monkey了,在你乱点的时候,monkey会输出你点击后回馈的信息。如果你打完命令之后模拟器上没有启动你所要启动的包,你需要自己启动,但是你只能启动你-p中指定的那几个包。ctrl+c中断
  • –randomize-throttle 用这个参数必须与–throttle 绑定使用。用于在事件之间插入随机延迟,随机延迟范围为0到throttle设置的时间,单位为毫秒
    adb shell monkey -p com.One.WoodenLetter --throttle 500 --randomize-throttle 100
  • –bugreport 当ANR,系统无响应,Crash的时候获得bugreport,其实对应的是一个叫做bugreport的工具,可以运行adb bugreport观察,它提供了那个时刻系统非常多的信息,从meminfo,cpuinfo,vmstat到dmesg,buildprop等信息,多到想不到。有兴趣的,可以google
  • –periodic-bugreport 紧跟次数,按照配置的几次次数,生成几次bugreport
  • –permission-target-system 要配置–pct-permission参数一起使用,Android6.0及以后的手机才有这个参数(百分比的值)

用到的模拟器和AndroidSDK应用包

链接:https://pan.baidu.com/s/1eiX-PnkTaro5Z9amExromg
提取码:x34a

▩初出茅庐,如果有其他好的方法,欢迎留言 (ง •_•)ง

  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值