Android测试系列(一)-Monkey

时间:2022-12-15 17:46:08

测试呢,是安卓开发不可避免的。会开发很重要,会测试同样很重要,自己开发的app没有bug,一次运行便过。这是多么幸福的事啊。不过,这基本是不可能的。或多或少都会有各种各样的bug。但是为了避免这些bug在线上版本出现问题,所以在上线之前肯定要测试的。这个可以交给公司测试人员。不过,作为开发者,不也应该知道如何测试吗?不然以后不想做开发想去做测试了。怎么转行呢?是吧?
Android测试系列(一)-Monkey
安卓常见的测试工具:
Monkey,MonkeyRunner,Instrumentation,UiAutomator,
Espresso,Selendroid,Robotium,Athrun等等。其他的放在后面介绍,这里先介绍Monkey吧,简单实用。


Monkey


Monkey简介

Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,适合对app做压力测试,顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。主要目的就是为了测试app 是否会Crash.


Monkey存放位置

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


Monkey具体使用

Monkey 命令启动方式:可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试 。
adb存放位置: G:\sdk\platform-tools。在这个目录下运行adb命令行即可。
可以通过 adb shell monkey –help 查看简单的帮助文档。


Monkey参数与事件类型

Android测试系列(一)-Monkey


Monkey基础参数

-p <允许的包名>

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。包名在清单文件AndroidManifest中查看。

指定一个包:adb shell monkey -p com.example.xxx 100

指定多个包:adb shell monkey -p com.example.xxx1 –p com.example.xxx2 100

-v

作用:命令行上的每一个-v都将增加反馈信息的详细级别。分别对应的参数如下 表所示:

Level 0 : adb shell monkey -p com.example.xxx -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

Level 1 : adb shell monkey -p com.example.xxx -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2 : adb shell monkey -p com.example.xxx -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息

-s
用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
* 示例:
*
Monkey测试1:adb shell monkey -p com.example.xxx –s 10 100
 
Monkey 测试2:adb shell monkey -p com.example.xxx –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽 然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的。
–throttle 毫秒值

--throttle <milliseconds>

用于指定用户操作(即事件)间的时延,单位是毫秒;

示例:adb shell monkey -p com.example.xxx –throttle 3000 100
(100次操作,每次间隔3秒)

-c {main-category}

-c <main-category>

作用:如果你指定一个或多个类别,Monkey将只允许系统启动这些指定类别中列出的Activity。如果你不指定任何类别,Monkey将选择谢列类别中列出的Activity,Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多个类别使用多个-c,每个-c指定一个类别。


Monkey事件类型

–pct-touch {百分比}

--pct-touch <percent>

作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。

adb shell monkey --pct-touch 100 -p com.example.xxx -v 10

–pct-motion{百分比}

--pct-motion <percent>

作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)注:常用参数,需注意的是移动事件是直线滑动,下面的trackball移动包含曲线移动。

adb shell monkey --pct-motion 100 -p com.example.xxx -v 10

–pct-trackball {百分比}

--pct-trackball <percent>

作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)注:不常使用参数,现在手机几乎没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数。

adb shell monkey --pct-trackball 100 -p com.example.xxx -v 10

–pct-nav{百分比}

--pct-nav <percent>

作用:调整基本的导航事件百分比。(导航事件由方向输入设备的上下左右按键所触发的事件组成)注:不常用操作。

–pct-majornav{百分比}

--pct-majornav <percent>

作用:调整主要导航事件的百分比。(这些导航事件通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退按键、菜单按键)

adb shell monkey --pct-majornav 100 -p com.example.xxx 10

–pct-syskeys {百分比}

--pct-syskeys <percent>

作用:调整系统事件百分比。(这些按键通常由系统保留使用,如Home、Back、Start Call、End Call、音量调节)

adb shell monkey --pct-syskeys 100 -p com.example.xxx 10

–pct-appswitch {百分比}

--pct-appswitch <percent>

作用:调整Activity启动的百分比。(在随机的时间间隔中,Monkey将执行一个startActivity()调用,作为最大程度覆盖被测包中全部Activity的一种方法)

–pct-anyevent{百分比}

--pct-anyevent

作用:调整其他事件的百分比。(这包含所有其他事件,如按键、其他在设备上不常用的按钮等)


Monkey调试选项

–hprof

作用:设置此选项,将在Monkey生成事件序列前后生成profilling报告。在data/misc路径下生成大文件(~5Mb),所以要小心使用。

–ignore-crashes

作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

示例1:adb shellmonkey -p com.example.xxx –ignore-crashes 1000
测试过程中即使xxx程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止;

示例2:adb shellmonkey -p com.example.xxx 1000
测试过程中,如果xxx程序崩溃,Monkey将会停止运行。

–ignore-security-exception

作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

–kill-process-after-error

作用:通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。设置此项,将会通知系统停止发生错误的进程。注意,正常(成功)的结束,并没有停止启动的进程,设备只是在结束事件之后简单的保持在最后的状态。

–monitor-native-crashes

作用:监视并报告Andorid系统中本地代码的崩溃事件。如果设置–kill-process-after-error,系统将停止运行。

–ignore-timeouts

作用:用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。


记录错误日志

adb shell monkey -p com.example.xxx -v -v -v 100 > monkeytest.txt

大致的使用就是这样了,觉得有用就点个赞吧,整理文档也是相当不容易的啊。