简介

基于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

很棒的项目,值得很久

使用参考

项目github地址
项目介绍
使用扫盲篇

操作步骤

  1. 拉去jar包
	git clone https://github.com/zhangzhao4444/Maxim.git
  1. 将 framework.jar , monkey.jar push 到手机上某个目录中,建议/sdcard
	adb push framework.jar monkey.jar /sdcard 
  1. 配置了黑白名单,也需要推送到手机上
	adb push awl.strings /sdcard
  1. 配置随机输入字符
	adb push max.strings /sdcard
  1. 执行下述的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:控制日志打印

  1. -v -v普通级的详细日志打印
  2. -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
  1. 拉取apk
 	git clone https://github.com/senzhk/ADBKeyBoard.git
  1. 安装apk
	adb -s 设备号 install ADBKeyboard.apk
  1. 测试是否正常:设备屏幕上进入到有可输入文本组件的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
  1. CLICK:点击通过xpath定位到的控件
  2. INPUTTEXT:配合text使用。在指定控件中输入text指定字符。输入需要提前安装ADBKeyBoard.apk,并且需要手动设置设备的当前输入法使用ADBKeyBoard
  3. TOUCH:配合args使用。 指定坐标 "args": "500,1000"
  4. SWIPE:配合args使用。 指定滑动路径 "args": "起点x轴坐标, 起点Y轴坐标, 终点X轴坐标, 终点Y轴坐标, 分多少步完成"
  5. KEYEVENT:配合keycode使用,执行键盘事件,KeyEvent码可参考Android官方KeyEvent文档
2、把文件放至到设备上
	adb push max.xpath.actions /sdcard
3、查看特殊事件执行日志

参考特殊事件的 log

- 屏蔽黑控件或黑区域max.widget.black

黑控件或者黑区域,顾名思义就是设置黑名单,指定的控件或者区域不会自动遍历到

  1. 仅配置bounds:屏蔽某个区域,在该区域内的控件或坐标不会被点击。
  2. 仅配置xpath:查找匹配的控件,屏蔽点击该控件。
  3. xpath+bounds:查找匹配的控件,当控件存在时屏蔽指定的区域

配置完成后,一定要文件推送到设备上:

	adb push max.widget.black /sdcard

控件优先级max.xpath.selector

参考Tory模式配置max.xpath.selectorjson文件

配置完成后,一定要文件推送到设备上:

	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 
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐