文章目录
简介
基于Monkey实现的更智能自动遍历,可以配置黑白名单控制自动遍历的范围
优势
- 1、速度快
每秒 10-15 个 Action 事件 - 2、兼容Android全平台
- 3、防跳出
- 4、防休眠
- 5、熔断机制
当某个事件在n秒内重复执行某个同样的动作,如重复点击同一位置 n 秒,自动触发熔断,开始执行其他随机事件 - 6、Activity黑白名单
- 7、随机自动输入
遇到可输入文本组件时,通过max.strings
控制指定字符,或随机输入键盘事件 - 8、崩溃堆栈自动保存
当崩溃(crash、oom)发生时自动抓取,并存于/sdcard/crash-dump.log - 9、特殊事件序列
配置max.xpath.actions
- 10、支持屏蔽黑控件或黑区域
配置max.widget.black
- 11、支持截图
- 12、Troy 模式
- 13、支持Monkey Api
很棒的项目,值得很久
使用参考
操作步骤
- 拉去jar包
git clone https://github.com/zhangzhao4444/Maxim.git
- 将 framework.jar , monkey.jar push 到手机上某个目录中,建议/sdcard
adb push framework.jar monkey.jar /sdcard
- 配置了黑白名单,也需要推送到手机上
adb push awl.strings /sdcard
- 配置随机输入字符
adb push max.strings /sdcard
- 执行下述的abd shell执行命令
命令
格式
adb shell \
CLASSPATH=设备上monkey.jar路径:设备上framework.jar路径 \
exec app_process /system/bin tv.panda.test.monkey.Monkey \
-p 被测App包名 测试策略
加上具体内容如下:
adb shell \
CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar \
exec app_process /system/bin tv.panda.test.monkey.Monkey \
-p com.panda.videoliveplatform \
--uiautomatordfs \
--running-minutes 60
参数释义
tv.panda.test.monkey.Monkey
: monkey入口类,不要修改
-p 包名
: 指定被测App
--uiautomatordfs
: 指定测试策略模式
--running-minutes 60
:总执行时长,以分钟为单位
--act-whitelist-file /sdcard/awl.strings
:定义白名单
--act-blacklist-file /sdcard/awl.strings
:定义黑名单
-v
:控制日志打印
-v -v
普通级的详细日志打印-v -v -v -v
更为具体、详细日志打印
--output-directory /sdcard/max
:自定义存储路径,执行命令添加参数
--imagepolling
:参数使用,开启崩溃回溯截图、关闭原截图逻辑
策略模式
--uiautomatordfs
:深度遍历策略,DFS模式uiautomatormix
:混合模式(70% 控件解析随机点击,其余 30% 按原 Monkey 事件概率分布)--pct-uiautomatormix n
自定义混合模式中控件解析事件占比--uiautomatortroy
Troy 模式
控件选择策略按max.xpath.selector
配置优先级进行深度遍历
其他可用参数
支持Monkey的参数。
比如想要控制事件间隔时间,可以通过加入参数
--throttle 500
来控制运行速度
配置文件
- Activity黑白名单
通过黑白名单控制,限定在某些场景内执行自动遍历。如只测试某几个相关页面
awl.strings文件配置如下,添加上需要运行或者不运行的activity
com.xueqiu.android.main.view.MainActivity
com.xueqiu.fund.quoation.index.IndexMassListPage
com.xueqiu.android.message.RecentTalkActivity
com.xueqiu.android.community.FindPeopleActivity
运行时加入参数--act-whitelist-file /sdcard/awl.strings
定义白名单:只执行
awl.strings
文件配置的Activity
运行时加入参数--act-blacklist-file /sdcard/awl.strings
定义黑名单:跳过
awl.strings
文件配置的Activity的执行
- 随机自动输入
前置条件:需要在设备上安装支持的ADBKeyBoard.apk
- 拉取apk
git clone https://github.com/senzhk/ADBKeyBoard.git
- 安装apk
adb -s 设备号 install ADBKeyboard.apk
- 测试是否正常:设备屏幕上进入到有可输入文本组件的Activity,然后PC端执行
adb -s 设备号 shell input text "hello,hongni"
在max.strings
文件上配置默认支持输入的字符内容
alibaba
hongniTest
2021-11-28
备注:max.strings
配置文件需要发到设备机上
adb push max.strings /sdcard
- max.config
配置解析
# 启动后sleep 6秒
max.startAfterNSecondsofsleep = 6000
# 唤醒页面后sleep 4秒
max.wakeupAfterNSecondsofsleep = 4000
# 是否开启截图,默认false
# 默认存储在设备上/sdcard文件夹下
# 也可参数自定义存储路径,执行命令添加参数--output-directory /sdcard/max
max.takeScreenShot = false
# 崩溃回溯式截图:当崩溃发生时 进行截图保存,实现可回溯崩溃场景,默认会在 /sdcard/crash_$timestamp
# 回溯区间大小 xx 张;配合--imagepolling 参数使用
max.flushImagesThreshold =xx
# 是否保存当前页面PageSource,默认xml格式
max.savePageSource = false
max.saveCurrentEventPoint = false
- 特殊事件max.xpath.actions
配置
1、创建max.xpath.actions
文件:json格式
[
{
"prob": 1,
"activity":"com.xueqiu.android.community.FindPeopleActivity",
"actions": [
{
"xpath": "//*[@resource-id='com.xueqiu.android:id/action_back_right']",
"index": 0,
"action": "CLICK",
"throttle": 1000
}
]
},
{
"prob": 1,
"activity":"com.xueqiu.android.common.search.USearchActivity",
"actions": [
{
"xpath": "//*[@resource-id='com.xueqiu.android:id/search_input_text']",
"action": "INPUTTEXT",
"text": "alibaba",
"index": 0,
"throttle": 3000
},
{
"xpath": "//*[@text='BABA']",
"action": "CLICK",
"index": 1,
"throttle": 300
}]
},
{
"prob": 1,
"actions": [{
"xpath": "//*[@class='androidx.recyclerview.widget.RecyclerView' and @resource-id='com.xueqiu.android:id/list']",
"index": 0,
"action": "SWIPE",
"args": "60,1700,60,700,100",
"throttle": 3000
}]
}
]
activity
指定在某个页面执行;当没有指定时,则通过xpath
定位控件执行xpath
支持xpath定位throttle
设置等待n毫秒之后,再执行下一操作action
CLICK
:点击通过xpath定位到的控件INPUTTEXT
:配合text
使用。在指定控件中输入text
指定字符。输入需要提前安装ADBKeyBoard.apk,并且需要手动设置设备的当前输入法使用ADBKeyBoardTOUCH
:配合args
使用。 指定坐标"args": "500,1000"
SWIPE
:配合args
使用。 指定滑动路径"args": "起点x轴坐标, 起点Y轴坐标, 终点X轴坐标, 终点Y轴坐标, 分多少步完成"
KEYEVENT
:配合keycode
使用,执行键盘事件,KeyEvent码可参考Android官方KeyEvent文档
2、把文件放至到设备上
adb push max.xpath.actions /sdcard
3、查看特殊事件执行日志
- 屏蔽黑控件或黑区域max.widget.black
黑控件或者黑区域,顾名思义就是设置黑名单,指定的控件或者区域不会自动遍历到
- 仅配置
bounds
:屏蔽某个区域,在该区域内的控件或坐标不会被点击。 - 仅配置
xpath
:查找匹配的控件,屏蔽点击该控件。 xpath
+bounds
:查找匹配的控件,当控件存在时屏蔽指定的区域
配置完成后,一定要文件推送到设备上:
adb push max.widget.black /sdcard
控件优先级max.xpath.selector
参考Tory模式配置max.xpath.selector
json文件
配置完成后,一定要文件推送到设备上:
adb push max.xpath.selector /sdcard
指定命令
adb shell \
CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar \
exec app_process /system/bin tv.panda.test.monkey.Monkey \
-p com.panda.videoliveplatform \
--uiautomatortroy \
--running-minutes 15 \
-v -v