Monkey自动化测试
三、monkey测试
1.monkey应用场景
- Monkey测试时Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。
- Monkey时命令行工具
- 弱点:Monkey虽然可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待测界面的值来执行验证操作。
- Monkey用来做什么?可以用来做压力测试也可以用来做自动化测试。
- Monkey什么时候用?等你们产品稳定后,没有特别多的bug的时候,一般会用monkey去测试待测应用的稳定性、健壮性(是否发生闪退、崩溃);整机测试。
2.monkey命令格式
- 启动安卓模拟器/真机
- 点击运行-输入cmd—进入命令行界面
- 查看设备连接情况adb devices
- 在命令行界面输入monkey命令
——-如果monkey需要指定设备,基本语法如下: - adb -s [device] shell monkey [options]
如:adb shell monkey -p com.lemon.lemonban —Ignore-crashes —ignore-tiomeouts —throttle 400 -v -s 3500 100000 > D:\monkey.txt
获取包名的三种方式:
1.获取前台应用程序的包名:
adb shell dumpsys activity| find “mDocusedActivity”:查看前台应用activity名—Android 8.0以下命令
adb shell dumpsys activity| find “mResumedActivity”:查看前台应用activity名—Android 8.0以上命令
2.adb shell pm list packages:系统所有的应用包名
3.adb shell进入手机Linux命令行模式
cd /data/data进行查看,/data/data会保存很多应用数据,如应用包名
3.monkey常见参数:
-p:用于约束限制,用此参数指定一个活多个包(Package,即App名字)。指monkey将只允许系统启动指定的APP。如果不指定包,monkey将允许系统启动
命令:adb shell monkey -p com.lemon.lemonban 1000
说明:com.lemon.lemonban 为包名,1000是事件计数(即让monkey程序模拟1000次)
-s:用于指定伪随机数生成器的seed值,如果seed相同,则两次monkey测试所产生的时间序列也相同。
命令:
- monkey测试1:adb shell monkey -p com.lemon.lemonban -s 101 100 提前指定
- monkey测试2:adb shell monkey -p com.lemon.lemonban -s 101 100
说明:两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的seed就可以保证两次测试产生的随机操作序列完全相同的,所以这个操作序列伪随机的。
注意:一般需要复现问题可以指定-s
-v:用于指定反馈信息级别(信息级别就是日志详细程度),总共分为3个级别
-v 日志级别 Level0
说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息
-v -v 日志级别 Level1
说明:提交较为详细的日志,包括每个发送到Activity的事件信息
-v -v -v 日志级别 Level2
说明:最详细的日志,包括了测试中选中/未选中的Activity信息
命令:adb shell monkey -p com.lemon.lemonban -v 100
说明:com.lemon.lemonban为包名,100是事件计数(即让monkey程序模拟100次)。
adb shell monkey -p com.lemon.lemonban -s 101 -v -v -v 100
Monkey测试出现问题需要提交monkey测试日志、logcat日志
adb shell monkey -p com.lemon.lemonban -s 101 -v -v -v 100 >D:\monkey.txt
崩溃:需要提交logcat日志
ANR:需要提交logcat日志、traces.txt
Monkey自动化
崩溃:测试需要提交logcat日志、monkey日志
ANR:测试需要提交logcat日志、monkey日志、traces.txt
—throttle<毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
命令:
adb shell monkey -p com.lemon.lemonban —throttle 3000 100
—randomize-throttle
在事件之间插入随机延迟,随机延迟范围为0-throttle设置的时间,单位为毫秒
命令:
adb shell monkey -p com.lemon.lemonban —throttle 5000 —randomize-throttle 100
说明:执行一百次monkey随机事件,每次事件的间隔在0-5000毫秒之间不固定
—png-whitelist-file 白名单,后面接txt文件
1)第一步把你设置的白名单的包名写到一个txt文档里面,记得路径和文档名字都是英文!D:whitelist.txt
2)把这个文件拉到我们的安卓机中去,放到/data/local/tmp下面
adb push D:\whitelist.txt /data/local/tmp 注意这两个反斜杠
命令:
adb shell monkey —pkg-whitelist-file /data/local/tmp/whitelist.txt 100
—pkg-blacklist-file 黑名单,后面接txt文件
命令:
adb shell monkey —pkg-blacklist-file /data/local/tmp/blacklist.txt 100
相当于指定包-p
Monkey常见参数-百分比事件:
名称 说明
—pct-touch 调整点击事件的百分比,down-up,编号为0
—pct-motion 调整移动事件的百分比,直线滑动,编号为1
—pct-pinchzoom 调整两指缩放压缩手势的百分比,比如放大缩小收视操作,编号为2
—pct-trackball 调整轨迹球时间的百分比,不常用,编号为3。
现在手机几乎没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数
—pct-rotation 调整旋转事件的百分比,横屏竖屏,编号为4
—pct-nav 调整导航事件的百分比,编号为5,包括上下左右,如方向输入设备的输入,老手机的上下左右键,智能机没有
—pct-majornav 调整主要导航事件的百分比,编号为6,例如中间键、回退键、菜单键
—pct-syskeys 调整“系统”按键事件的百分比,编号为7,这些按钮一般专供系统使用,如Home、Back、Start、Call、End Call、音量控制
—pct-appswitch 调整app切换事件的百分比,编号为8
—pct-flip 调整键盘唤出隐藏事件的百分比,编号为9
—pct-anyevent 跳转除上面事件外,其他时间的百分比,编号为10,如按键、其他在设备上不常用的按钮等
命令:
adb shell monkey -p com.lemon.lemonban —pct-rotatiob 100 50
80% 点击事件、20%移动事件,执行100次的monkey命令:
adb shell monkey -p com.lemon.lemonban —pct-rotatiob 20 —pct-touch 80 100
四、monkey自动化测试脚本
1.monkey自动化脚本:
- 一系列能够被monkey程序识别的命令集合
- 可以实现固定/重复性的工作
- 通过命令家在脚本测试、效率高
2.编写规则
- 脚本优势:简单、快捷、不需要借助任何工具,可以做简单的性能测试/自动化测试
- 脚本格式:
#头文件、控制monkey发送消息的参数
type = raw events
count = 10
speed = 1.0
以下monkey命令
start data >>
LaunchActivity(pkg_name,activity)
DispatchPress(KEYCODE_ENTER)
DispatchPress(KEYCODE_HOME)
说明:
表示注释
type = raw events 表示原始事件
count = 10 表示指定数量
3.monkey常用API:
API 说明
LaunchActivity(pkg_name,activity) 启动应用的Activity
Tap(x,y) 模拟单击事件
PotateScreen(rotationDegree,persist) 旋转屏幕,rotationDegree为旋转角度,persist表示旋转之后是否固定
DispatchPress(keyName) 按键
DispatchFlip(true/false) 打开或者关闭软键盘
RunCmd(cmd) 在设备上运行shell命令
PressAndHold(x,y,pressDuration) 模拟长按事件
DispatchString(input) 输入字符串
DeviceWakeUp() 唤醒屏幕
UserWait(sleepTime) 让脚本中断一段时间(毫秒)
4.monkey脚本编写步骤
(1)了解常用的API规则
(2)确定步骤,如下:
- 获取包名和activityname
- 通过SDK自带的aapt工具
- 一步一步的再手机上操作,并获取像素点
- 利用工具(SDK自带uiautomatorview.bat或者开发者选项中的坐标位置)
- 要仔细的检查下,是否脚本上的每一步都跟你的手动操作都对应
- 检查脚本,跑一下脚本。
(3)运行脚本
- 将文件放到手机中:adb push 本地monkey脚本文件 /sdcard/
- 一般我们呢会放在手机 /data/local/tmp/目录下
- 运行文件:adb shell monkey -f 手机文件地址/文件名称 次数
5.实例:
- 要求:打开柠檬班,输入用户名和密码,登录;登录后选择退出
- 步骤分解:
- 1.点击柠檬版app
- 2.点击我的柠檬
- 3.点击头像登录
- 4.点击输入框,输入手机号码
- 5.点击输入框,输入密码
- 6.点击登录
- 7.点击设置
- 8.点击退出当前账号
aapt dump badging apk路径 | find“package”/ aapt dump badging apk路径 | grep“package”
aapt dump badging apk路径 | find “launchable-activity” / aapt dump badging apk路径 | grep “launchable-activity”
实例monkey自动化测试的程序:
头文件、控制monkey发送消息的参数
type = raw events
count = 10
speed = 1.0
以下monkey命令
start data >>
# 启动柠檬班App指令
LaunchActivity(com.lemon.lemonban,com.lemon.lemonban.activity.WelcomeActivity)
# 等待启动页面加载完毕
UserWait(8000)
# 点击我的柠檬
Tap(886,1870)
# 点击我的头像区域进入到登录页面
Tap(432,206,)
# 输入手机号码
DispatchString(13323234545)
# 让光标定位到密码输入框
Tap(308,646)
# 输入密码
DispatchString(123456)
# 点击登录
Tap(538,817)
# 等待登录
UserWait(3000)
# 停止应用的运行
RunCmd(am force-stop com.lemon.lemonban)
UserWait(3000)
更多推荐
所有评论(0)