Android自动化测试之Monkey使用

时间:2022-08-07 11:34:23

      Mokey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。当应用程序崩溃(CRUSH)或产生了程序不响应(ANR)的错误时,Monkey将会停止并报错。Monkey 测试的对象仅为应用程序包,测试使用的事件流数据流是随机的,不能进行自定义,但可对测试对象进行事件类型,数量,频率进行设置。

Monkey源码

Monkey 基本语法:

adb shell monkey [options] <event-count>
options:配置monkey的设置,例如:指定启动哪个包,不指定将会随机启动所有程序。

event-count :让monkey发送事件的次数。


Monkey 参数

1. monkey 发送随机事件简单指令

例如:启动指定的应用程 序,并向其发送100个伪随机事件

adb shell monkey -p your.package.name  -vvv 100 > monkeytest.txt

-v 是信息级别即日志的详细程度,3个v就是输出等级1至3的所有事件


Android自动化测试之Monkey使用


注:获取app包名:

adb shell 进入monkey命令行

logcat | grep START   再点击要测试的app,然后查看cmp= xx.xx.xx/可得到包名

通过ls data/data 可查看Android 设备的所有应用包

关于如何获取APP的包名和启动页Activity 各种方法请参考这篇文章

2. --throttle <millseconds>

   后面跟每次执行事件间隔时间(毫秒)

3. seed参数

       seed的作用,就是建立一个flag,确保每次monkey 命令运行所跑的事件顺序一致,这样若出现问题可以复现。

Monkey的随机操作是基于一个seed 值产生,每一个seed值都会产生唯一的操作序列,只要每次seed值一样,

操作的随机序列也一样。

测试1:adb shell monkey -p com.android.calculator2 -s 100 20
测试2:adb shell monkey -p com.android.calculator2 -s 100 20
两次操作的结果一样。

4. 触摸事件参数--pct-touch

monkey 设定触摸事件百分比

adb shell monkey --pct-touch <percent> <event-count>

0代表touch事件。

Android自动化测试之Monkey使用

不指定点击事件的百分比

Android自动化测试之Monkey使用

5.动作事件 --pct-motion

adb shell monkey --pct-touch <percent> <event-count>

Android自动化测试之Monkey使用

6.忽略崩溃异常、超时、许可错误事件

adb shell monkey --ignore-crashes <event-count>
adb shell monkey --ignore-timeouts <event-count>
adb shell monkey --ignore-security-exceptions <event-count>

更多参数应用可见http://www.android-doc.com/tools/help/monkey.html

Monkey Script

通过脚本来实现可重复的固定事件操作

adb shell monkey -f <scriptfile> <event-count>

Monkey Script 常用API 介绍:

LaunchActivity(pkg_name, cl_name): 启动应用的Activity。参数:包名和启动的Activity,Activity名前用. 连接包名。

DispatchPointer(downtime,eventTime,action,x,y,xpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags)  点击事件。主要是action(0按下,1弹起),x,y (点击控件的坐标)3个参数

Tap(x, y, tapDuration): 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。

DispatchPress(keycode) :按下键值,如66回车键

DispatchTrackball: 模拟发送轨迹球事件

DispatchFlip(true/false): 打开或者关闭软键盘。

DispatchString(input):  输入字符串。

UsrWait(sleepTime): 等待时间

ProfileWait():等待5s

LongPress():  长按2秒。

PressAndHold(x, y, pressDuration):  模拟长按事件

编写一个点击浏览器搜索框输入字符串搜索的脚本

type=user
count=10
speed=1.0
start data>>
LaunchActivity(com.Android.browser,com.android.browser.BrowserActivity)//启动APP
UserWait(2000)
Tap(100,100) //点击搜索输入框
DispatchString(test) //输入搜索字符串
UserWait(1000)
DispatchPress(66) //点击回车键搜索
ProfileWait() //等待5s
Tap(100,100) //点击搜索输入框
DispatchPress(112) //点击删除清空输入框
UserWait(1000)
DispatchPress(KEYCODE_HOME)//退出APP回到主页

保存后push到手机中利用shell monkey 运行脚本

adb push D:\test.script /data/local/tmp/
adb monkey shell -f /data/local/tmp/test.script -v 5