Monkey稳定性测试常用命令、日志管理与分析

Monkey测试简介

什么是Monkey

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

Monkey事件

1.触摸事件:在屏幕某处按下并抬起的操作。由一个touch(ACTION_DOWN)事件和一个touch(ACTION_UP)事件组成。可以通过--pct-touch参数配置百分比。

2.滑动事件:在屏幕某处按下、随机移动再抬起的动作,即直线滑动操作。从monkey执行该事件对外输出的日志可以看到:该事件由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成。可以通过--pct-motion参数配置百分比。

3.二指缩放事件:在屏幕上两处同时按下,进行放大缩小操作。从monkey执行该事件对外输出的日志可以看到:该事件由一个ACTION_DOWN事件、一个ACTION_POINTER_DOWN事件(模拟两个手指同时按下),一些列ACTION_MOVE事件(模拟两个手指同时做直线滑动)和一个ACTION_POINTER_UP事件、一个ACTION_UP事件组成(模拟两个手指同时放开)。可以通过--pct-pinchzoom参数配置百分比。

4.轨迹事件:模拟曲线滑动。可以通过--pct-trackball参数配置百分比。

5.屏幕旋转事件:一个隐藏的事件,在Android官方文档中并没有记载。从monkey执行该事件对外输出的日志可以看到:该事件由一个rotation事件组成。可以通过--pct-rotation参数配置百分比。

6.主要导航事件:通常会导致UI界面中的操作,如键盘的中间键、回退按键、菜单按键。从monkey执行该事件对外输出的日志可以看到:该事件由一个key(ACTION_DOWN)和一个key(ACTION_UP)组成。可以通过--pct-majornav参数配置百分比。

7.系统按键事件:点击系统保留使用的按键的操作,如点击home键、返回键、音量调节键等。从monkey执行该事件对外输出的日志可以看到:该事件由一个key(ACTION_DOWN)和一个key(ACTION_UP)组成。可以通过--pct-syskeys参数配置百分比。

8.启动activity事件:是指在手机上启动一个activity的操作。在随机的事件间隔中,monkey将执行一个startActivity()方法,作为最大限度上覆盖测试包中activity的方法。从monkey执行该事件对外输出的日志可以看到:该事件是由一个switch操作组成的。从手机上看,实际上是打开了com.android.settings这个应用上的一个com.android.settings.Settings的一个Activity界面。可以通过--pct-appswitch参数配置百分比。

9.键盘事件:与键盘相关的操作,如点击输入框、键盘弹起、点击输入框以外的区域、键盘收回等。可以通过--pct-flip参数配置百分比。

Monkey参数

1.常规类参数:

(1)帮助参数    adb shell monkey -h (没有设备链接的时候会报错,试试就知道了^_^)注意:adb shell 和 monkey 连在一起使用,会进入设备执行monkey命令,执行完monkey后会自动退出设备。如果先执行adb shell,此时会进入设备(出现#或$),然后再执行monkey -h和之前是一样的效果,只是不会自动退出设备,以便我们继续执行其他monkey命令。如果想退出设备,执行命令exit(学废了吗可以试一下^_^)

(2)打印日志参数    adb shell monkey -v <event-count>

-v: 打印日志信息。每增加一个-v都将增加日志信息的级别,-v越多,日志信息越详细。最多支持3个-v。如:adb shell monkey -v 200 (200代表随机事件数)。

参数级别:0级:除启动提示、测试完成和测试结果外,提供的信息较少。1级:提供较详信息,如逐个发送到Activity。2级:提供更详细的安装信息,如未被选中和被选中的Activity。

2.事件类参数:

事件类参数的作用是对随机事件进行调控,使其遵照设定运行。如设置各种事件的百分比,设置各种事件的种子值等。频率参数主要限制事件执行的时间间隔。

(1)运行指定脚本    adb shell monkey -f 脚本路径

(2)伪随机数生成种子值(重复执行随机事件)    adb shell monkey -s 233 <event-count>  其中233是种子值,即时2我们不指定,系统也会自动赋予一个值。这样下次执行该命令就可以完全重复之前的随机操作。

(3)设置间隔(在每一个命令之间设置固定的间隔事件,单位毫秒)    adb shell monkey --throttle <millisceconds>   如 adb shell monkey --throttle 3000 s (注意这里3000的单位是毫秒)

小贴士:设置时间间隔后事件会执行一段事件,此时如果想停止事件运行,可以Ctrl+c。

3.调整事件百分比参数:--pct-<event-type>    如:

(1)调整触摸事件百分比为30%    adb shell monkey -v --pct-touch 30 200

(2)调整手势事件百分比为20%     adb shell monkey -v --pct-motion 20 200

(3)同时指定以上两种事件的百分比     adb shell monkey -v --pct-touch 30 --pct-motion 20 200

(4)调整应用启动事件百分比为20%    adb shell monkey -v --pct-appswitch 20 200    启动应用事件就是打开应用,最大限度地打开指定package下的所有应用。(我理解这里主要用于测试手机的稳定性,如针对性测试某个app应该就不需要配置这个参数,但我们可以发现该事件的默认百分比是2%,所以这个事件的应用场景还要再研究一下^_^。

(5)调整屏幕旋转百分比为30%    adb shell monkey -v --pct-rotation 30 300

(6)调整二指缩放事件百分比为30%(并设置时间间隔为0.5秒)    adb shell monkey -v --pct-pinchzoom 30 --throttle 500 200

(7)调整轨迹事件百分比为30%(并设置时间间隔为0.5秒)    adb shell monkey -v --pct-trackball 30 --throttle 500 200

小贴士:带两个*号的行是执行命令本身的报错信息。如: 这个报错是说没有指定事件数量。

4.约束类参数:

(1)主要是包约束(运行指定的包)    adb shell monkey -p <packageName>

5.调试类参数

(1)应用程序崩溃后继续发送事件    --ignore-crashes

(2)超时错误后继续发送事件    --ignore-timeouts

(3)应用程序权限发生错误后继续发送事件    --ignore-security-exceptions

操作流程

通过名为“monkey”的Shell脚本去启动Monkey.jar程序(shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey),在你指定的APP应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。

目的

测试app 是否会是否会Crash,主要用于稳定性测试
操作命令格式:adb shell monkey {+命令参数}

操作步骤

  1. 环境配置:把adb加入系统环境,手机开启开发者模式
  2. 连接手机,获取测试的包名。
  3. Monkey编写测试命令,并运行。

如果要提前中结束测试,中断运行中的monkey

CTRL+C
adb shell ps | grep monkey  返回进程号
adb shell kill [刚才查到的进程号]

Monkey日志的保存

1.保存再PC

把com.gwm.thailand包随机事件的1级(两个-v代表1级)日志打印到了PC端d盘的monkeylog.log文件中:

adb shell monkey -v -v -p com.gwm.thailand --pct-syskeys 0 --throttle 500 200 >d:\monkeylog.log

2.保存到设备

把com.gwm.thailand包随机事件的1级日志打印到设备的sdcard目录的monkey.log文件中:

先执行adb shell

再执行monkey -v -v -p com.gwm.thailand --pct-syskeys 0 --throttle 500 200 >/sdcard/monkeylog.log

执行命令cd /sdcard 进入设备的sdcard目录,再执行命令ls 查看该目录下的所有目录就可以看到我们刚保存的日志文件。再执行cat monkeylog.log可以查看日志的内容。

小贴士:sdcard就是设备的根目录,如手机的本地文件。

3.将事件的标准流与错误流分开保存

adb shell monkey -v -v -p com.gwm.thailand 200 1>d:\monkeystd.log 2>error.log

从Monkey日志中看问题

测试结果初步判断

  1. monkey执行时未加--ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
  2. 程序无响应的问题:在日志中搜索 “ANR”
  3. 崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
    1. 算术异常类:ArithmeticExecption
    2. 空指针异常类:NullPointerException
    3. 类型强制转换异常:ClassCastException
    4. 数组负下标异常:NegativeArrayException
    5. 数组下标越界异常:ArrayIndexOutOfBoundsException
    6. 违背安全原则异常:SecturityException
    7. 文件已结束异常:EOFException
    8. 文件未找到异常:FileNotFoundException
    9. 字符串转换为数字异常:NumberFormatException
    10. 操作数据库异常:SQLException
    11. 输入输出异常:IOException
    12. 违法访问错误:IllegalAccessError
    13. 内存不足错误:OutOfMemoryError
    14. 堆栈溢出错误:StackOverflowError 15.其他,参考

找出问题后的操作步骤:

  1. 找到是monkey里面的哪个地方出错
  2. 查看Monkey里面出错前的一些事件动作,并手动执行该动作
  3. 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。

常规测试的monkey用法

adb shell monkey -p com.xxx.myapp --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>d:\mylog.log

对应参数说明
-p指定包名
--throttle 100 MILLISEC事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件
--ignore-crashes作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-timeouts作用:通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-security-exception 作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--ignore-native-crashes忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止
--monitor-native-crashes 监视崩溃时的本地代码
-v 每个-v都将增加反馈信息的级别。共3个级别,因此,-v -v -v可以提供最详细的设置信息。
1000000 这里是指点击的次数
>d:\mylog.log 日志输出

### 如何在 Eclipse IDE 中创建 Maven 项目 #### 创建Maven 项目 为了在Eclipse中启动一个新的Maven项目,用户应当通过菜单栏选择`File > New > Project...`随后从新建项目向导里挑选`Maven > Maven Project`[^2]。 #### 设置项目结构和配置 一旦选择了Maven项目选项之后,可以选择是否要基于预设的模板来初始化项目。如果希望手动控制pom.xml的内容,则应取消勾选“Create a simple project (skip archetype selection)”这一项以便能够浏览可用的archetype列表并从中做出选择。Archetypes是用于快速搭建特定类型的Maven项目的骨架代码生成器。 #### 编辑POM文件 对于每一个新的Maven项目而言,核心配置都保存于Project Object Model(POM)文件即`pom.xml`之中。此文件包含了关于项目及其依赖关系的信息。编辑该文件可定义诸如版本号、打包方式以及所需库等属性。例如: ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 基本信息 --> <groupId>com.example</groupId> <artifactId>maven-demo-project</artifactId> <version>1.0-SNAPSHOT</version> <!-- 打包类型,默认为jar --> <packaging>jar</packaging> <!-- 属性定义 --> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!-- 依赖管理 --> <dependencies> <!-- 添加所需的第三方库依赖 --> </dependencies> </project> ``` #### 构建与运行项目 完成上述步骤后即可利用内置工具或命令行执行mvn clean install指令来进行编译测试及安装操作。这一步骤将会依据所设定的目标平台自动处理源码转换成字节码的过程,并将产物放置至本地仓库供后续使用。 #### 更改JRE设置 有时默认关联的JRE可能不符合需求,这时可以通过右键点击项目名称->Properties->Java Build Path->Libraries节点下的JRE System Library条目上的Edit按钮来自由切换至其他已安装好的JDK版本[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值