monkey测试简介:

Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法

monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件, 提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。


monkey和monkeyrunner的不同点:

MonkeyMonkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。
monkeyrunner:monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。


详细介绍及环境搭建步骤:http://bbs.pediy.com/showthread.php?t=189584


查找需要测试的包名:

>adbshell pm list packages     命令查看手机上的所有包名,找到自己需要测试的包名


Monkey的特征

  • 测试的对象仅为应用程序包,有一定的局限性。

  • Monky测试使用的事件流数据流是随机的,不能进行自定义。

  • 可对MonkeyTest的对象,事件数量,类型,频率等进行设置。

Monkey基本命令参数的介绍

  • 基本命令格式 $ 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中断。


Monkey使用方法


在windows环境下,使用dos命令行。在桌面按下Ctrl+R,然后输入cmd,弹出命令行界面。


Monkey停止的三种情况,1.应用报错 2.应用出现anr异常,无响应 3 指定包名后,应用中有跳往其他原因的意图时,也会报错停止


Monkey的测试策略及示例:

一、先上一个简单的测试用例

设计用例的思路就是设置不同的事件比,不同的时间间隔,执行的事件数一般起码要上万吧,不然怎么能称作稳定性测试,中间在加入不同的测试包名,模拟多个应用切换的场景。



异常:  1、插入其他应用:搜狗输入法、电话、短信  、QQ等

            2、 忽略崩溃、超时、安全异常、跟踪本地方法的崩溃问题 


示例:

-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|[email protected]_sp7715ea:/ $ ps|grep monkey
ps|grep monkey
shell     7772  185   277516 22244 ffffffff4010a58c S com.android.commands.monkey
[email protected]_sp7715ea:/ $ kill 7772


日志分析:

正常情况,  如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成\

异常情况

Monkey 测试出现错误后,一般的分析步骤
看Monkey的日志 (注意第一个swith以及异常信息等)
1. 程序无响应的问题: 在日志中搜索 “ANR
2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug

Monkey 执行中断, 在log最后也能看到当前执行次数


更多相关文章

  1. VisionMobile:2014年Q1移动开发者经济报告(四)2.1、平台开发
  2. 文件修改如何简单修改Android的so文件
  3. Android(安卓)RxJava系列一: 基础常用详解
  4. Android弱网测试中关于网络检测的一些借鉴方法
  5. android调试模式的操作技巧,调试BUG极快呀
  6. Android触摸屏开发知识汇总
  7. Android(安卓)APK自动化测试
  8. 落后就要挨打!2020最需关注5大 Android(安卓)开发技术!
  9. android 事件机制,捕捉与事件监听总结整理(二)Event Handlers,Handli

随机推荐

  1. android - open failed: EROFS (Read-onl
  2. Android RoboGuice 使用指南(15):Inject
  3. android开发 零碎知识
  4. 开源项目之Android GreenDroid(界面库)
  5. Android之记住密码与自动登陆实现
  6. Android LCD(一):LCD基本原理篇
  7. android > 布局尺寸
  8. 配置android开发环境eclipse获取ADT获取
  9. Android 在Service开启对话框的方法
  10. set CCache for building android source