Android-Monkey 压力测试
Adnroid-UI Automator Viewer 的使用
Adnroid-Monkey Script 压力测试(一)
Adnroid-Monkey Script 压力测试(二)
Android-MonkeyRunner 压力测试(一)
Android-MonkeyRunner 压力测试(二)
Android-MonkeyRunner API 参考
Android-Monkey 源代码参考
1. Monkey Script 介绍
Monkey Script 是用 Monkey 来进行压力测试时执行特定操作时的命令(函数)集合,它只能通过屏幕坐标的方式执行特定事件,如:点击、长按、拖动等。
如果它要对屏幕上的某个 View 执行点击事件,就必须知道该 View 在手机屏幕上的坐标。
因为使用 Monkey 对 App 进行压力测试时,Monkey 的操作是随机的。
Monkey Script 可以使 Monkey 执行特定的操作对 App 进行压力测试。
如果要执行更高级的压力测试操作,如:截屏、弹窗、安装Apk等,就要用到功能更加强大的 MonkeyRunner。
手机屏幕上View坐标获取工具(UI Automator Viewer) 它在 Android ADK 的 tools\bin 目录下。
UI Automator Viewer 参考: https://www.jianshu.com/p/b2890c631ec5
MonkeyRunner 参考: https://developer.android.google.cn/studio/test/monkeyrunner?hl=zh_cn
2. Monkey Script API
1. 启动应用 LaunchActivity
LaunchActivity(String packageName,String activityName)
参数:
- packageName: 程序的包名
- activityName: 要启动的 Activity,必须是完整的包名加类名
注意:LaunchActivity() 函数启动的 Activity 需要在 AndroidManifest 文件中配置 Activity 的 exported 属性为 true。
2. 等待事件 UserWait
UserWait(long sleeptime)
参数:
- sleeptime: 等待的时间,单位为毫秒
3. 输入字符串 DispatchString
DispatchString(String text)
参数:
- text: 要输入的字符串
4. 点击按键 DispatchPress
DispatchPress(int keyCode)
参数:
- keyCode: 按键的值,参考 android.view.KeyEvent 类
5. 执行 shell 命令 RunCmd
RunCmd(String cmd)
参数:
- cmd: 要执行的 shell 命令
6. 打开或关闭键盘 DispatchFlip
DispatchFlip(boolean keyboardOpen)
参数:
- keyboardOpen: true 打开,false 关闭
7. 点击事件 DispatchPointer
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)
参数:
- downtime: 指按键最初被按下的时间
- eventtide: 指事件发生的时间
- action: 指具体操作的动作,如按下(0 代表按下,1 代表抬起)
- x, y: 指点击的 X 和 Y 的坐标
- pressure: 压力事件的大小(0~1)
- size: 指触摸的记事值(0~1)
- metastate: 指当前按下mate键的标识
- xprecision,yprecision: 指x和y坐标的精确值
- device: 事件的来源(0~X)
- edgeflags: 指超出屏幕的范围
8. 轨迹球事件 DispatchTrackball
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)
- 参数和 DispatchPointer 一样
9. 拖动 Drag
Drag(float xStart,float yStart, float xEnd, float yEnd,int stepCount)
参数:
- xStart: 事件开始时的 X 坐标
- yStart: 事件开始时的 Y 坐标
- xEnd: 事件结束时的 X 坐标
- yEnd: 事件结束时的 Y 坐标
- stepCount: 拖动事件它由多个大大小小的事件组成,用来指定它是由多少个小事件组成的,值越大,越连贯
10. 双指缩放 PinchZoom
PinchZoom(float pt1xStart,float pt1yStart,float pt1xEnd,float pt1yEnd,
float pt2xStart,float pt2yStart,float pt2xEnd,float pt2yEnd,int stepCount)
参数:
- pt1xStart: 第一个手指开始时的 X 坐标
- pt1yStart: 第一个手指开始时的 Y 坐标
- pt1xEnd: 第一个手指结束时的 X 坐标
- pt1yEnd: 第一个手指结束时的 Y 坐标
- pt2xStart: 第二个手指开始时的 X 坐标
- pt2yStart: 第二个手指开始时的 Y 坐标
- pt2xEnd: 第二个手指结束时的 X 坐标
- pt2yEnd: 第二个手指开始时的 X 坐标
- stepCount: 缩放次数
11. 发送按键消息 DispatchKey
DispatchKey(long downTime,long eventTime,int action,int keyCode,
int repeat,int metaState,int device,int scancode)
参数:
- downTime: 指按键最初被按下的时间
- eventTime:按键事件发生时间
- action: 指具体操作的动作,0 表示按下,1 表示抬起
- keyCode: 按键的值,参考 android.view.KeyEvent 类
- repeat: 按按键的次数
- metaState: 指当前按下mate键的标识
- device: 事件的来源(0~X)
- scancode: 事件的原始设备扫描代码
12. 旋转屏幕 RotateScreen
RotateScreen(int rotationDegree,int persist)
参数:
- rotationDegree:旋转的角度,只支持 0,90,180,270
- persist: 是否保持旋转前的状态,0 不保持,1 保持
13. 长按事件 LongPress
LongPress()
- 标准长按为 2 秒,没有参数,直接调用。
14. 长按事件 PressAndHold
PressAndHold(float x,float y,long pressDuration)
参数:
- x: 指长按的 X 坐标
- y: 指长按的 Y 坐标
- pressDuration:长按的持续时间,单位毫秒
PressAndHold 用于模拟一个长按事件,和 LongPress 类似,但它可以指定长按坐标和时长。
15. 手指单击事件 Tap
Tap(float x,float y,long tapDuration)
参数:
- x: 指单击的 X 坐标
- y: 指单击的 Y 坐标
- tapDuration :单击的持续时间,可选参数,单位毫秒
16. 唤醒设备并解锁 DeviceWakeUp
DeviceWakeUp()
- DeviceWakeUp 命令可以唤醒设备并进行解锁。没有参数,直接调用。当然需要的是一个无锁屏密码的设备才可以,有数字或图形锁屏密码,都会导致失败。
17. 等待 5 秒 ProfileWait
ProfileWait()
- ProfileWait 命令和 UserWait 类似,但是它已经设定好等待的时长,就是 5s ,没有参数,直接调用。
网友评论