Monkey事件
一、Monkey参数
(1)帮助类参数
monkey -h
(2)日志级别
adb shell monkey -v -v -v 随机事件数(-v表示日志信息级别,越多越详细)
(3)事件类参数
1)执行指定的脚本
adb shell monkey -f <scriptfile> <event-count>
eg: adb shell monkey -f /mnt/sdcard/test1
2)伪随机数生成种子值
使用-s命令可以重复执行之前的伪随机操作,本身每次执行伪随机事件操作也会默认生成一个seed值
adb shell moneky -s <seed> <event -count>
eg: adb shell monkey -s 666 100
3)设置间隔如果你希望在每个命令之间加上固定的间隔时间,可以用 --throttle(注意前面是)命令。(想要打印日志文件就加-v)
adb shell monkey --throttle <milliseconds>
eg:adb shell monkey --throttle 1000 100
(4)调整触摸事件百分比(0:触摸事件;1:手势事件..)
如果你希望调整触摸事件的百分比,记住使用 --pct-touch
adb shell monkey --pct-touch
eg:adb shell monkey --pcy-touch 30(触摸事件变成30%) 200
<precent>--pct-touch:后面接触摸事件百分比
(5)调整手势事件百分比
adb shell monkey --pct-motion
eg:adb shell monkey -v -v --pct-motion 40(手势事件变成40%) 200
同时调整手势触摸事件
(6)调整应用启动事件百分比(8)
如果你希望应用启动事件的百分比,记住使用--pct-appswitch
adb shell monkey --pct-appswitch <precent>
eg:adb shell monkey -v --pct-appswitch
--pct-appswitch:后面接应用事件百分比
应用启动事件(即activity launches)俗称打开应用,通过调整startActivity()方法最大限度地开启package下的所有应用
(7)约束类参数
①包约束
-p:后面接一个或多个包名(<allowed-package-name>),如果应用需要访问其他包里的Activity,那相关的包也需要在此同时指定,如果不指定任何包
monkey将允许系统启动全部包里的Activity
adb shell monkey -p <allowed-package-name> <event-count>
eg:adb shell monkey -p com.ss.android.ugc.aweme 500
两个Activity:adb shell monkey -p com.ss.android.ugc.aweme -p com.tencent.mm 500
②activity类约束
如果你希望将monkey限制在一个或者几个类别中,使用以下命令:
adb shell monkey -c <main-category> <event-count>
以下命令表示进行Intent.CATEGORY_LAUNCHER类别的Activity并发送1000个随机事件
adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000
(8)调试类参数
①应用程序崩溃后继续发送事件
如果你希望monkey在应用程序崩溃后继续发送事件,则用--ignore-crashes命令
adb shell monkey --ignore-crashes <event-count>
在设置此选项后,当应用程序崩溃时,monkey将继续运行到计数完成,如果不设置,则可能异常停止
②超时错误继续发送事件
如果你希望monkey在任何超时错误后继续发送事件,则需要用到 --ignore-timeouts指令
adb shell monkey --ignore-timeouts
在设置此选项后,当程序发生超时错误时,monkey将继续完成
③应用程序权限错误发生后继续发送事件
如果你希望monkey在程序错误发生后继续发送事件,则用--ignore-security-exceptions
adb shell monkey --ignore-security-exception
在设置此选项后,程序出任何错误,monkey也会继续运行
④其他
二、Monkey参数应用综合案例
(1)测试场景
自动化刷抖音,进入用户主页,截取用户信息,并保存用户图片
(2)需求分析
(3)测试命令
三、monkey自定义脚本的稳定性测试
(1)测试案例
(2)需求分析
(3)获取元素坐标点位置
(4)Monkey脚本API简介
(5)脚本格式
(6)编写脚本
type = raw events count = 1 #执行次数 speed = 1.0 #执行速率 start data >> #开始执行 LaunchActivity(com.ss.android.ugc.aweme,com.ss.android.ugc.aweme.splash.SplashActivity) #appPackage包名,appActivity UserWait(1000) #t休息1秒 Tap(526.7,427.5) #点击事件进入抖音界面 UserWait(3000) Tap(841.0,756.5) UserWait(2000) Tap(138.8,381.7) UserWait(2000)
(7)执行脚本
四、Monkey日志管理
(1)日志管理作用
(2)monkey日志保存方法
(3)保存在pc中
(4)保存在手机中
(5)标准流和错误流分开保存
五、Monkeyrunner
(1)简介(基于jpython写出来的)
(2)功能
(3)和monkey的区别
(4)环境搭建
(5)安装检测
六、monkeyrunner API
(1)MonkeyRunner工具有三类:
①MonkeyRunner
②MonkeyDevice
③MonkeyImage
官方文档API:http://www.android-doc.com/tools/help/monkeyrunner_concepts.html#
1.MonkeyRunner类
MonkeyRunner提供连接真机和模拟器、输入、暂停、警告框等
常用方法:
2.MonkeyDevice类
MonkeyDevice类提供了安装和卸载程序包,开启Activity、发送键和点击事件、运行测试包等方法
常用方法
①installPackage(string path)
②removePackage(string package)
③startActivity(string uri,string action,string data,string mimetype,iterable categories dictionary extras,component component,flags)
④touch(integer x,integer y,integer type)
案例:
#执行抖音
from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner import MonkeyDevice as md print("connect devices..") device = mr.waitForConnection() print("launch app..") package = \'com.ss.android.ugc.aweme\' activity = \'com.ss.android.ugc.aweme.splash.SplashActivity\' runComponent = package+\'/\'+activity device.startActivity(component=runComponent)
代码执行方式
3.MonkeyImage类
MonkeyImage类在测试过程中用来保存各种格式的测试截图,并可进行图像对比
常用方法:
①takeSnapshot()进行屏幕截图
②writeToFile保存图像文件到指定的文件路径
用法示例
测试场景:
思路分析:
脚本实现
from com.android.monkeyrunner import MonkeyRunner as mr from com.android.monkeyrunner import MonkeyDevice as md from com.android.monkeyrunner import MonkeyImage as mi print("connect devices..") device = mr.waitForConnection() print("launch app..") package = \'com.ss.android.ugc.aweme\' activity = \'com.ss.android.ugc.aweme.splash.SplashActivity\' runComponent = package+\'/\'+activity device.startActivity(component=runComponent) #启动app mr.sleep(3) #等待3秒 print("enter user information") device.touch(835.0,759.5,\'DOWN_AND_UP\') #进入用户主页 mr.sleep(2) print("exit user information") device.touch(47.9,95.9,\'DOWN_AND_UP\') #退出主页 mr.sleep(2)
注意事项
方法调用错误