#### MonkeyRunner:用来连接设备或模拟器。
MonkeyDevice: 提供安装,卸载应用,发送模拟事件
MonkeyImage:完成图像保存,及对比的操作
可以做 多设备控制 功能测试 回归测试
压力测试结果
1.CRASH:即崩溃,应用程序在使用过程中,非正常退出
2.ANR: Application Not Responding # 延迟时间太长 未响应
adb devices # 确认手机和电脑连接成功
adb install package.apk # 安装包
adb shell monkey 1000 # 发送压力指令 1000次
adb logcat | grep START # 获取包名 cmp=com.miui.calculator
adb shell monkey -p package 100 # 给指定的包打压力 package包名
adb shell monkey -p com.android.settings -v --throttle 1000 100 # -v 日志 --throttle 测试间隔
# seed 参数 using seed *********
adb shell monkey -s 100 50 # 重复执行
触摸事件
# 设定触摸事件百分比
adb shell monkey -v -p com.android.settings --pct-touch 100 100 # 执行100个点击事件 百分比 次数
// Event percentages:
// 0: 100.0% # 代表 --pct-touch 触摸事件
// 1: 0.0% # 代表 --pct-motion 滑动事件
// 2: 0.0% # 代表 --pct-pinchzoom 缩放事件
// 3: 0.0% # 代表 --pct-trackball 轨迹球事件
// 4: -0.0% # 代表 屏幕旋转事件百分比
// 5: 0.0% # 代表 ---pct-nav 基本导航事件
// 6: 0.0% # 代表 --pct-majornav 主要导航事件
// 7: 0.0% # 代表 --pct-syskeys 系统事件
// 8: 0.0% # 代表 --pct-appswitch Activity启动事件
// 9: 0.0% # 代表 --pct-flip 键盘翻转事件
// 10: 0.0% # 代表 --pct-anyevent 其他事件
崩溃事件,超时事件
# 忽略崩溃和异常
adb shell monkey --ignore-crashes <event-count>
# 忽略超时事件
adb shell monkey -ignore-thimeouts <event-count>
CRASH 结果析取, ANR结果析取
# CRASH: com。。。。。。。。。 拷贝发给开发
# ANR in app
# Reason:Key******
# 不在执行monkey中获取ANR信息 在手机系统目录(/data/anr/)下面有一个traces.txt 里面有ANR信息
adb shell
root@shamu:// # cd /data/anr/
root@shamu:/data/anr # ls
traces.txt
root@shamu:/data/anr # more traces.txt
Monkey Script
# 执行Monkey脚本命令
adb shell monkey -f <scriptfile> <event-count>
# 上传脚本到手机/data/local/tmp/
push 文件名 /data/local/tmp/
# 执行脚本
monkey -f 文件名 2
# 坑1 加 android:exported = “True”
# 如果你的工程文件里的AndroidManifest.xml下 android:exported = “True”
# 轨迹球事件
DispatchTrackball(long downtime,
long eventtide,
int action,
float x,
float y,
float pressure,
float size,
int metastate,
float xprecision,
float yprecision,
int device,
int edgeflags)
# 【注意:按一个键需要两个轨迹球事件】
# 参数详解:
# long downtime 指键最初被按下的时间
# long eventtide 指事件发生的时间
# int action 指具体操作的动作,如按下 * 0代表按下,1代表弹起
# float x,float y指x和y的坐标 *
# float pressure 压力事件的大小(0~1)
# float size 指触摸的记事值(0~1)
# int metastate 指当前按下mate键的标识
# float xprecision,float yprecision 指x和y坐标的精确值
# int device 事件的来源(0~x)
# int edgeflags 指超出屏幕了范围
# 点击事件
# 【注意:按一个键需要两个点击事件】
DispatchPointer(long downtime,
long eventtide,
int action,
float x,
float y,
float pressure,
float size,
int metastate,
float xprecision,
float yprecision,
int device,
int edgeflags)
# 参数详解:
# long downtime 指键最初被按下的时间
# long eventtide 指事件发生的时间
# int action 指具体操作的动作,如按下 * 0代表按下,1代表弹起
# float x,float y指x和y的坐标 *
# float pressure 压力事件的大小(0~1)
# float size 指触摸的记事值(0~1)
# int metastate 指当前按下mate键的标识
# float xprecision,float yprecision 指x和y坐标的精确值
# int device 事件的来源(0~x)
# int edgeflags 指超出屏幕了范围
DispatchString # 输入字符串命令
DispatchString(String text)
LaunchActivity # 启动应用
LaunchActivity(package,Activity)
UserWait # 等待事件
UserWait(1000)
DispatchPress # 按下键值
DispatchPress(int keycode) # keycode 66 回车键
# 控制 monkey 发送消息的 Monkey 头
typ=user
count=10
speed=1.0
start data>>
# 在此之下,编写 monkey 脚本命令
LaunchActivity(com.******, Activity)
UserWait(2000)
DispatchPointer(10,10, 0,100,100, 1,1,-1,1,1,0,0)
DispatchPointer(10,10, 1,100,100, 1,1,-1,1,1,0,0)
DispatchString(zpc)
UserWait(1000)
DispatchPress(66)
UserWait(6000)
MonkeyRunner
MonkeyRunner API -alert
# 警告框
void alert(string message,
string title,
string okTile)
MonkeyRunner API - waitForConnection
# 等待设备连接,有镀铬device id,需要指明具体那个设备
waitForConnection(float timeout, string deviceid) # 秒 deviceid
MonkeyDevice API -drag
# 拖动
# 拖动起始点,拖动的目标点,需要耗时的时间,插值点的步数,默认10
drag(tuple start, tuple end, float duration, integer steps)
MonkeyDevice API -press
# 按键
# keycode 名: Down, UP, DOWN_AND_UP
press(string keycode, dictionary type)
MonkeyDevice API -startActivity
# 启动应用
startActivity(package+'/'+activity)
MonkeyDevice API -touch
# 点击
# X坐标值,Y坐标
# type:DOWN, UP, DOWN_AND_UP
touch(integer X, integer Y, integer type)
MonkeyDevice API -type
# 输入
type(string message)
# ***
MonkeyDevice API -takeSnapshot
# 截屏
MonkeyImage takeSnapshot()
MonkeyImage API -sameAs
# 图像对比
# 需要对比的图像名称,对比相似度的百分比
boolean sameAS(MonkeyImage other, float percent)
MonkeyImage API -writetoFile
# 保存图像文件
# 路径, 类型
void writeToFile(string path, string format)
E:javaandroid-sdk ools
λ monkeyrunner E:pycharmappiumMRmk-ad.py # 要在tools下运行MonkeyRunner
#!/usr/bin/python
# -*- coding: UTF-8 -*
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
# 连接设备
device = MonkeyRunner.waitForConnection(3,'127.0.0.1:62001')
# 启动app
device.startActivity('com.android.browser/.BrowserActivity')
MonkeyRunner.sleep(3)
# 点击搜索框
device.touch(100,100,'DOWN_AND_UP')
MonkeyRunner.sleep(2)
# 输入查询词
device.touch()