Android Monkey自动化测试

时间:2021-06-17 05:39:33

前言

如果你做Android开发,还没有使用过Monkey进行测试,那么今天看到这篇文章,希望能解决你Android测试中的一些问题。起码能帮你省点测试的时间并且发现更多的问题。

Monkey简介

Monkey是一个可运行在模拟器和实际设备中的Android命令行自动化测试工具,它可以模拟伪随机的用户事件流,例如点击、触摸、手势等。你可以使用Monkey对正在开发的程序进行压力测试。

Monkey的特征:
  • 测试的对象为程序包名,通过-p参数指定。
  • Monkey测试使用的事件流、数据流是随机的,不能进行自定义。

Monkey的使用

Monkey是Android系统自带,有Java语言编写的自动化测试工具,在Android文件系统中的存放路径为:/system/framework/monkey.jar

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

基本语法

adb shell monkey [option] <event-count>

参数

[Option] -p

用于约束限制,用此参数指定一个包或多个包(Package,即APP)。指定之后,Monkey只允许系统启动指定的APP,如果不指定,Monkey将允许系统启动所有的APP

[Option] -v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分为三个级别,分别对于参数如下所示:

日志级别:Level 0

示例:adb shell monkey -p com.example.list -v 100

说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息

日志级别:Level 1

示例:adb shell monkey -p com.example.list -v -v 100

说明:提供较为详细的日志信息,包括发送到Activity的事件信息

日志级别:Level 2

示例:adb shell monkey -p com.example.list -v -v -v 100

说明:提供最为详细的日志信息,包括测试中选择和未选中的Activity信息

[option] --kill-process-after-error

说明:用于指定当前应用程序发生错误时,是否停止其运行。如果指定此参数,当用户应用程序发生错误时,应用程序停止并且保持在当前的状态

[option] --throttle <milliseconds>

说明:用于指定Monkey操作事件的间隔时间,单位是毫秒

[option] --pct-trackball <percent>

说明:调整轨迹事件的百分比

[option] --pct-nav <percent>

说明:调整基本导航事件的百分比

[option] --pct-majornav <percent>

说明:调整主要导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

[option] --pct-anyevent <percent>

说明:调整其他类型事件的百分比

<event-count>

说明:指定随机事件的次数

Example

记录一下我经常使用的monkey命令,就是组合使用了以上参数:

adb shell monkey -p com.example.listview -v -v -v --kill-process-after-error  --pct-trackball 0 --pct-nav 0 --pct-majornav 0 --pct-anyevent 0 --throttle 500 500000 > /mnt/sdcard/monkey.log 2 >&1 &

自动化脚本

写了一个脚本供自动化测试,省的每次都输入一大串monkey命令了,代码如下:

#!/bin/bash

REPORT_DIR=./report
DATE_TIME=`date "+%Y%m%d"`

#remove old report files
echo "remove old reporting files..."
if [ -d $REPORT_DIR ]; then
rm -r $REPORT_DIR
fi

#mkdir for new report files
echo "report files will be stored in $REPORT_DIR"
mkdir $REPORT_DIR

#run monkey on phone system
echo "Monkey is running"
adb shell monkey -p com.example.listview -v -v -v --kill-process-after-error --pct-trackball 0 --pct-nav 0 --pct-majornav 0 --pct-anyevent 0 --throttle 500 500000 > $REPORT_DIR/monkey_$DATE_TIME.log

#grep creash log
echo "catch crash log..."
grep -A 10 -h -r CRASH $REPORT_DIR > $REPORT_DIR/crash_$DATE_TIME.log