monkey测试简介:php
Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法
android
monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件, 提供了一个API,使用此API写出的程序能够在Android代码以外控制Android设备和模拟器。shell
monkey和monkeyrunner的不一样点:windows
Monkey:Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。
monkeyrunner:monkeyrunner工具则是在工做站上经过API定义的特定命令和事件控制设备或模拟器。安全
详细介绍及环境搭建步骤:http://bbs.pediy.com/showthread.php?t=189584 app
查找须要测试的包名:框架
>adbshell pm list packages 命令查看手机上的全部包名,找到本身须要测试的包名ide
测试的对象仅为应用程序包,有必定的局限性。工具
Monky测试使用的事件流数据流是随机的,不能进行自定义。单元测试
可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
基本命令格式 $ adb shell monkey [options]
若是不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的所有包。 $ adb shell monkey -p com.luxji.watchesapp -v 500
-p 指定测试包名,能够指定多个
-v 指定输出信息级别,分为三种
-v 仅提供启动提示、测试完成和最终结果等少许信息, 适合于通常的调试
-v -v 提供较为详细的日志,包括每一个发送到Activity的事件信息
-v -v -v,最详细的日志,包括了测试中选中/未选中的Activity信息
-s 指定seed值,若是seed相同,则两次Monkey测试所产生的事件序列也相同的
-c 指定一个或多个类别的activity被启动
-ignore-crashes和-ignore-timeouts,在应用崩溃和无响应的状况下,monkey不会中止。
-throttle MILLISEC 表示每个随机事件中间的时间间隔
-ignore-security-exceptions:一般,当应用程序发生许可错误(如启动一个须要某些许可的Activity)时,Monkey将中止运行。若是设置了此选项,Monkey将继续向系统发送事件,直到计数完成。
-monitor-native-crashes:监视并报告Android系统中本地代码的崩溃事件。若是设置了–kill-process-after-error,系统将中止运行。
-kill-process-after-error:若是程序出现错误,monkey将结束此程序进程。
-hprof:设置此项,将在monkey事件序列以前和以后当即生成profilling报告。这将会在data/misc中生成大文件(约5mb)因此要当心使用它。
-pct-touch:调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕的某单一位置)。
-pct-motion:动做事件的百分比(动做事件由屏幕上某处的一个down事件、一系列的随机事件和一个up事件组成)。
-pct-trackball:调整轨迹事件的百分比(轨迹事件由一个或几个随机移动组成,有时还伴随着点击)。
-pct-syskeys:调整系统按键事件的百分比(这些按键一般被保留,由系统使用,如home,back,start call,end call及音量控制)。
-pct-nav 调整基本导航事件的百分比(导航事件来自方向输入设备的up/down/left/right组成)。
-pct-majornav:调整“主要”导航事件的百分比(这些导航事件一般引起图形界面中的动做,如:5-way键盘的中间按键、回退按键、菜单按键)
-pct-appswitch:调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,做为最大程度覆盖包中所有Activity的一种方法。
-pct-anyevent:调整启动Activity的百分比。它包罗了全部其它的事件类型,如:按键,其它不经常使用的设备按钮。
-pct-flip:
–wait-dbg:中止执行中的Monkey,直到有调试器和它相链接。
–dbg-no-events:设置此选项,Monkey将执行初始启动,进入到一个测试Activity,而后不会再进一步生成事件。为了获得最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,能够监视应用程序所调用的包之间的转换。
-port:为monkey开启专用端口。此时只monkey不会帮你乱点击,而此时你本身就是一只monkey了,在你乱点的时候,monkey会输出你点击后回馈的信息。若是你打完命令以后模拟器上没有启动你所要启动的包,你须要本身启动,可是你只能启动你-p中指定的那几个包。ctrl+c中断。
在windows环境下,使用dos命令行。在桌面按下Ctrl+R,而后输入cmd,弹出命令行界面。
Monkey中止的三种状况,1.应用报错 2.应用出现anr异常,无响应 3 指定包名后,应用中有跳往其余缘由的意图时,也会报错中止
Monkey的测试策略及示例:
1、先上一个简单的测试用例
设计用例的思路就是设置不一样的事件比,不一样的时间间隔,执行的事件数通常起码要上万吧,否则怎么能称做稳定性测试,中间在加入不一样的测试包名,模拟多个应用切换的场景。
异常: 一、插入其余应用:搜狗输入法、电话、短信 、QQ等
二、 忽略崩溃、超时、安全异常、跟踪本地方法的崩溃问题
示例:
-p 后面能够添加多个测试包名,以便模拟应用间的切换
C:\Users\Administrator>adbshell monkey -p com.chemi -p com.sougou --pct-touch 25 --pct-motion 15 --pct-pinchzoom 5--pct-rotation 10 --pct-majornav 25 --pct-flip 10 --pct-syskeys 10 --throttle300 --ignore-crashes --monitor-native-crashes -v -v -v 10000 >log040502.txt
结束monkey进程:
直接拨数据线是没有用的,必须把这个进程杀掉monkey才会中止
C:\Documents and Settings\hui.qian>adb shell
1|shell@scx15_sp7715ea:/ $ ps|grep monkey
ps|grep monkey
shell 7772 185 277516 22244 ffffffff4010a58c S com.android.commands.monkey
shell@scx15_sp7715ea:/ $ kill 7772
日志分析:
正常状况, 若是Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 表明执行完成\
异常状况
Monkey 测试出现错误后,通常的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception” (若是出现空指针, NullPointerException) 确定是有bugMonkey 执行中断, 在log最后也能看到当前执行次数