一、初始monkey
小米手机root遇到的问题,1,miui9的稳定版无法root,必须先把版本换成开发版,再进行root,采用小米自带的安全中心的root方式,root的过程中,会更新手机权限什么的,完成之后,可以通过su获取root权限,但跑monkey的时候还是出错了,会卡在一个屏幕不动。
使用kingroot进行手机root,跑到一半就root失败,很尴尬。
重启手机,发现被Kingroot执行root成功了。
**1、**monkey包含的命令参数如下
C:\MyProject\SVNProject>adb shell monkey --help
** Error: Unknown option: --help
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
COUNT
**2、**monkey执行成功的标志
## Network stats: elapsed time=135ms (0ms mobile, 0ms wifi, 135ms not connected)
// Monkey finished
time=135ms表示执行时间为0.135s。
二、指令解释:
3、–pct-touch :percent为100的时候表示全部都是点击事件
C:\MyProject\SVNProject>adb shell monkey -p com.miui.calculator --pct-touch 100 -vvvv 10
:Monkey: seed=1522754034173 count=10
:AllowPackage: com.miui.calculator
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:
// 0: 100.0%
// 1: 0.0%
// 2: 0.0%
// 3: 0.0%
// 4: -0.0%
// 5: 0.0%
// 6: 0.0%
// 7: 0.0%
// 8: 0.0%
// 9: 0.0%
// 10: 0.0%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.miui.calculator/.cal.CalculatorActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.miui.calculator/.cal.CalculatorActivity } in package com.miui.calculator
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.miui.calculator/.cal.CalculatorActivity } in package com.miui.calculator
:Sending Touch (ACTION_DOWN): 0:(546.0,302.0)
:Sending Touch (ACTION_UP): 0:(550.3135,293.37067)
:Sending Touch (ACTION_DOWN): 0:(554.0,1620.0)
:Sending Touch (ACTION_UP): 0:(553.01154,1619.8733)
:Sending Touch (ACTION_DOWN): 0:(742.0,1532.0)
:Sending Touch (ACTION_UP): 0:(741.75793,1541.677)
:Sending Touch (ACTION_DOWN): 0:(929.0,364.0)
:Sending Touch (ACTION_UP): 0:(928.0578,356.02808)
:Sending Touch (ACTION_DOWN): 0:(176.0,1609.0)
Events injected: 10
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
## Network stats: elapsed time=135ms (0ms mobile, 0ms wifi, 135ms not connected)
// Monkey finished
如果我只想要点击事件则用 –pct-touch 100
4、如果遇到崩溃,monkey就会停止运行,
如下两种指令可以让monkey忽略异常
[–ignore-crashes] [–ignore-timeouts]
adb shell monkey -p com.miui.calculator --ignore-crashes --pct-touch 100 -vvvv 10
5、carsh结果提取
adb shell monkey -p com.test.hzx.testapplication --ignore-crashes -v 100 >
C:\Users\Hzx\Desktop\Document\result2.txt
这条命令是表示,如果发生异常,可以把异常保存到电脑里。错误日志会以carsh开始
6、ANR结果提取
与carsh类似,错误日志以ANR开始
三、monkeyscript
adb shell monkey -f
1、DispatchTrackball
DispatchTrackball(long downtime, long eventide, int action, float x, float y, float pressure,
float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)
action: 0-按下,1-弹起
2、DispatchPointer:点击事件
3、DispatchString命令
DispatchString(strings)
4、LaunchActivity命令
LaunchActivity(package, activity)
5、UserWait命令等待事件
UserWait(1000)
6、DispatchPress 按下键值
DispatchPress(int keycode) #keycode 66 回车键
7、monkeyscript实例
demo.script
typ=user
count=10
speed=1.0
start data >>
LaunchActivity(com.your.package,your.package.name.WelcomeActivity)
UserWait(4000)
LaunchActivity(com.your.package,your.package.name.MainActivity)
DispatchPointer(10,10,0,200,850,1,1,-1,1,1,0,0)
DispatchPointer(10,10,1,200,850,1,1,-1,1,1,0,0)
LaunchActivity(com.your.package,your.package.name.DetailActivity)
UserWait(1000)
DispatchPointer(10,10,0,100,800,1,1,-1,1,1,0,0)
DispatchPointer(10,10,1,100,800,1,1,-1,1,1,0,0)
UserWait(4000)
先把脚本从电脑push到手机
C:\MyProject\SVNProject>adb push C:\Users\xxx\Desktop\Document\demo.script /data/local/tmp
C:\Users\Hzx\Desktop\Document\demo.script: 1 file pushed. 0.1 MB/s (233 bytes in 0.003s)
命令:adb shell monkey -f /data/local/tmp/demo.script 10
有几个问题需要注意下,
7.1、需要让activity设置android:exported=”true”,使程序支持第三方启动
<activity
android:name="com.your.package.WelcomeActivity"
android:screenOrientation="portrait"
android:exported="true">
7.2、如果需要操作的动作在很深的activity中,那脚本就得把所有的activity都写到脚本中
7.3、获取在屏幕中的点击动作,具体如何获取点击的像素位置,通过Android\sdk\tools\uiautomatorviewer.bat工具
只要像素点在这之间就行。
四、MonkeyRunner
1、API介绍
1.1、alert()
五、归结
1,monkey是测试随机动作事件。
2,monkeyscript可以满足对具体某个动作重复操作。
3,monkeyrunner可以实现错误截屏等操作。