android monkey 工具,Maxim-高速 Android Monkey 工具使用记录
一 部署准备
项目地址
部署 Maxim
快捷打开 cmd, 视窗键 +r 打开运行窗口后,输入 cmd 回车
D: 回车进入 D:盘 准备直接 git clone 到 D:盘根目录下
D:\>git clone https://github.com/zhangzhao4444/Maxim.git
Cloning into 'Maxim'...
remote: Counting objects: 70, done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 70 (delta 25), reused 60 (delta 15), pack-reused 0
Unpacking objects: 100% (70/70), done.
部署环境介绍
操作系统
快捷查看 win 系统版本, 视窗键 +r 打开运行窗口后, 输入 winver 回车
Android Sdk
下载地址 http://tools.android-studio.org/index.php/sdk 处下载 android-sdk_r24.4.1-windows.zip
将 android-sdk-windows 解压到你需要的目录下,笔者是 D:\Android\android-sdk-windows
配置 android-sdk 环境变量:
ANDROID_HOME 变量值为 android-sdk 的解压目录,笔者为 D:\Android\android-sdk-windows
PATH PATH 变量值的最后追加 ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools;
接下来你便可以用 D:\Android\android-sdk-windows 下的 SDK Manager.exe 下载配置 SDK 或 AVD Manager.exe 配置 AVD 模拟器了。
如果你需要测试 android 应用的话,请先安装配置好某一版本的 SDK 及其相关工具。
如下图,SDK manager 必要配置:
Tools->Options 设置
其它要下载的:
此处为了与 Macaca 环境兼容,目前稳定没敢乱升级,大家也可用此.
此处的按需选择与 AVD 模拟器配套使用的
该步骤,主要是为了部署 adb 工具而已,当然也有独立部署 adb 的方案.这个你按需选择吧,不过你既然要搞 android 相关了,android sdk 工具的部署最终还是逃不过的.
启动一模拟器后,用 adb 查看连接
D:\>adb devices -l
List of devices attached
192.168.60.101:5555 device product:vbox86p model:Samsung_Galaxy_S7___7_1_0___API_25___1440x2560 device:vbox86p
真机小米 Mix2
需要开启真机开发者选项->USB 调试, 模式和其他相关,主要是调试这一栏要打开的有
用 adb 查看连接
D:\>adb devices -l
List of devices attached
12345678 device product:chiron model:MIX_2 device:chiron
二查看使用帮助
Maxim 目录下 README.md
# Maxim
> A Kotlin implementation of Monkey TEST(Non-Stub) forAndroid that runs on Simulator/Android devices.
https://testerhome.com/topics/11719
## 1. Requirements
- Android 5,6,7,8
- Android5 not support dfs
## 2. Setup
- adb push framework.jar /sdcard
- adb push monkey.jar /sdcard
[- adb push ape.strings /sdcard]
[- adb push awl.strings /sdcard]
## 3. Usage
Maxim can be either started with adb commandline.
- adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar execapp_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatordfs 5000
### 3.1 Args
[dfs mode] --uiautomatordfs monkey use DFS algorithm . About 5 action per second.
[mix mode] --uiautomatormix monkey use AccessibilityService resolve tree node and random choose. About 10-20 action per second.
--pct-uiautomatormix uiautomator action ratio inmix mode
--running-minutes n monkey total run time
--act-whitelist-file /sdcard/awl.strings
--act-blacklist-file
other args is same to Android Monkey
Maxim 目录下 使用帮助.docx
【环境预备】
支持 android 5,6,7,8
注 android 5不支持 dfs mode
将 framework.jar , monkey.jar push 到手机上某个目录中,比如/sdcard
【执行测试】
cmd 命令 :
adb shell CLASSPATH=/data/local/tmp/monkey.jar:/data/local/tmp/framework.jar execapp_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatordfs 5000
蓝: monkey入口类
红: 被测app
绿: 测试策略
策略支持:
1. 模式 DFS
--uiautomatordfs
增加深度遍历算法
2. 模式 Mix
--uiautomatormix
直接使用底层accessibiltyserver获取界面接口 解析各控件,随机选取一个控件执行touch操作。
同时与原monkey 其他操作按比例混合使用
默认accessibilityserver action占比50%,其余各action分剩余的50%
accessibilityserver action占比可配置 --pct-uiautomatormix n
3. 保留原始monkey
4. 总运行时长
--running-minutes 3 运行3分钟
5. --act-whitelist-file /sdcard/awl.strings 定义白名单
--act-blacklist-file
其他参与与原始monkey一致
20180112 增加防跳出及切回、防误点状态栏及下拉状态栏
20180115 增加防睡眠及睡眠唤醒、防假死及自拉活机制
20180116 增加随机输入
随机输入 需要提前安装adbkeyboard
https://github.com/senzhk/ADBKeyBoard
随机输入默认随机输入字符,内容可自定义配置,格式如ape.strings文件,每行为随机输入项。
20180118 增加Activity黑白名单 格式如awl.strings,可对跳转做更细粒度控制,比如控制仅在几个特定Activity中跑monkey
20180119 framework兼容 Android5, 6, 7, 8.0
Android5 不支持dfs 模式,因5的accessibiltyserver缺少一个api。故不支持
增加 APP崩溃时自动保存堆栈信息到 /sdcard/crash-dump.log 注 追加保存
参数说明
tv.panda.test.monkey.Monkey 主调入口 无需修改
-p com.panda.videoliveplatform 待测appid
策略模式
--uiautomatormix 混合模式(70%控件解析随机点击,其余30%按原Monkey事件概率分布)
--pct-uiautomatormix n 可自定义混合模式中控件解析事件概率
--uiautomatordfs DFS深度遍历算法(优化版)(注 Android5不支持dfs)
非以上两种为原始Monkey策略
执行时长
--running-minutes 60 执行60分钟monkey
场景细粒度控制
--act-whitelist-file /sdcard/awl.strings 自定义Activity白名单
例:
com.panda.videoliveplatform.activity.WelcomeActivity
com.panda.videoliveplatform.activity.SplashWakeActivity
com.panda.videoliveplatform.activity.MainFragmentActivity
com.panda.videoliveplatform.activity.LiveRoomActivity
锁定跳转只可进入其中的某个Activity
--act-blacklist-file 同上
其他参数及用法同原始Monkey
三 测试
向手机部署 Maxim 相关 D:\>cdMaxim
D:\Maxim>dir
D:\Maxim 的目录
2018/02/03 10:08
2018/02/03 10:08
2018/02/03 09:55 20 ape.strings
2018/02/03 09:55 447 ape.xpath.actions
2018/02/03 09:55 223 awl.strings
2018/02/03 09:55 1,149,240 framework.jar
2018/02/03 09:55 121,367 monkey.jar
2018/02/03 09:55 1,093 README.md
2018/02/03 09:55 33,644 使用帮助.docx
7 个文件 1,306,034 字节
2 个目录 85,022,330,880 可用字节
D:\Maxim>adb push framework.jar /sdcard
framework.jar: 1 file pushed. 5.1 MB/s (1149240 bytes in0.214s)
D:\Maxim>adb push monkey.jar /sdcard
monkey.jar: 1 file pushed. 0.0 MB/s (121367 bytes in2.628s)
执行
去替换掉 -p com.panda.videoliveplatform 为你的 packagename
adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar execapp_process /system/bin tv.panda.test.monkey.Monkey -p com.sinacp.ggaicai --uiautomatormix --running-minutes 3
走你~~~~~~~~~~~~~~~~~
我只能说太特么快了,快到本家的 app,界面都来不及响应.
效果不错,这样我们的测试方案又多了一种了,以前的 Appcrawler 这种适合做随机遍历 或者 定制业务流遍历,
加上 Appetizer 插桩后又可以性能捕获和分析监控了.
个人觉得,这种暴力遍历 + 性能捕获 更能测试 App 稳定性,捕获的 Appetizer 分析报告,开发用了都说参考意义很大的咧.
剩下的要研究下那两个配置文件 ape.strings 和 awl.strings,默认还支持 mokey 原生命令行参数.
稍后更新.
四 更新补充 adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar execapp_process /system/bin tv.panda.test.monkey.Monkey -p com.sinacp.ggaicai --uiautomatormix --running-minutes 3 --throttle 300 -v -v
太快的话,可以加上--throttle 300
--throttle 作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓 Monkey 的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。一般设置为 300 毫秒,原因是实际用户操作的最快 300 毫秒左右一个动作事件,所以此处一般设置为 300 毫秒
加上-v -v 可以调整日志输出级别
-v -v 作用:Level1(-v -v),提供了较为详细的测试信息,如逐个发送到 Activity 的事件信息。 这样在执行过程日志中,便可以看到遍历到的 currentActivity 当前被执行 Activity 名.
这个可以放入 黑白名单文件中 awl.strings .如
--act-whitelist-file /sdcard/awl.strings 或 --act-blacklist-file /sdcard/awl.strings
整个工具并不难
五 (MIX 模式) 增加支持 特殊事件序列
2018.02.23 update
需要配置 max.xpath.action 文件
案例:
[
{
"prob": 1,
"activity":"tv.panda.account.activity.WebLoginActivity",
"actions": [
{
"xpath": "//*[@class='android.widget.EditText']",
"action": "INPUTTEXT",
"text": "13810751000",
"index": 0,
"throttle": 300
},
{
"xpath": "//*[@class='android.widget.EditText']",
"action": "INPUTTEXT",
"text": "123400",
"index": 1,
"throttle": 300
},
{
"xpath": "//*[@content-desc='登录'and@class='android.view.View']",
"index": 0,
"action": "CLICK",
"throttle": 1000
}]
},
{
"prob": 1,
"actions": [
{
"xpath": "//*[@class='android.view.View']",
"index": 0,
"action": "SWIPE",
"args": "10,1000,800,1000,100",
"throttle": 3000
}]
},
{
"prob": 1,
"actions": [
{
"xpath": "//*[@class='android.view.View']",
"index": 0,
"action": "TOUCH",
"args": "500,1000",
"throttle": 1000
}]
}
]
上述包含 3 个特殊事件
发生概率 prob =1 为 100% 发生
仅当 当前 activity 为 tv.panda.account.activity.WebLoginActivity 时或无 activity 配置时做事件查找
xpath 为待查找控件的 xpath 支持复杂型 xpath,支持 index 索引选择
throttle 为该特殊步骤执行完后 sleep n 毫秒
Action 支持
1.Click 点击匹配到的 xpath 控件
2.INPUTTEXT 在匹配到的 xpath 控件中输入 text 指定字符,输入需要提前安装 adbkeyboard
3.TOUCH 点击指定坐标 args = (x,y)
4.SWIPE 按执行路径滑动 args = (x1,y1,x2,y2,step)
注 配置完成后请贴在 json.cn 检查格式,注意” : , 非中文
以上是作者的更新,接下来我们来体验
D:\Maxim>git pull
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 21 (delta 7), reused 13 (delta 7), pack-reused 8
Unpacking objects: 100% (21/21), done.
From https://github.com/zhangzhao4444/Maxim
2fcc38f..d406b60 master -> origin/master
Updating 2fcc38f..d406b60
Fast-forward
README.md | 2 ++
max.config | 2 ++
ape.strings => max.strings | 0
ape.xpath.actions => max.xpath.actions | 0
monkey.jar | Bin 121367 -> 131805 bytes
test/ADBKeyBoard.apk | Bin 0 -> 163634 bytes
"test/max.xpath.actions\346\241\210\344\276\2131" | 27 ++++++++++++++++
"test/max.xpath.actions\346\241\210\344\276\2132" | 35 +++++++++++++++++++++
...5\277\347\224\250\345\270\256\345\212\251.docx" | Bin 33644 -> 102828 bytes
9 files changed, 66 insertions(+)
create mode 100644 max.config
rename ape.strings => max.strings (100%)
rename ape.xpath.actions => max.xpath.actions (100%)
create mode 100644 test/ADBKeyBoard.apk
create mode 100644 "test/max.xpath.actions \346\241\210\344\276\2131"
create mode 100644 "test/max.xpath.actions \346\241\210\344\276\2132"
在工程目录下 D:\Maxim git pull 更新后,我们需要重新向连接的手机 push framework.jar 和 monkey.jar
D:\Maxim>adb push framework.jar /sdcard
framework.jar: 1 file pushed. 5.1 MB/s (1149240 bytes in0.214s)
D:\Maxim>adb push monkey.jar /sdcard
monkey.jar: 1 file pushed. 0.0 MB/s (121367 bytes in2.628s)
先优先编辑好 max.xpath.actions 配置 注意格式 和 英文符号编写
[
{
"prob": 1,
"activity":"com.huasheng.stock.ui.usercenter.LoginUI",
"actions": [
{
"xpath": "//*[@resource-id='com.huasheng.stock:id/account_num']",
"action": "INPUTTEXT",
"text": "13699901888",
"index": 0,
"throttle": 760
},
{
"xpath": "//*[@resource-id='com.huasheng.stock:id/pwd']",
"action": "INPUTTEXT",
"text": "hshshshs",
"index": 0,
"throttle": 760
},
{
"xpath": "//*[@text='登录' and @class='android.widget.Button']",
"index": 0,
"action": "CLICK",
"throttle": 1600
}]
}
]
书写该配置需要学习使用界面元素捕获工具,主要是为了获取 xpath 该值
1 android sdk 工具自带的 ** \tools\uiautomatorviewer.bat
2 appium-desktop 桌面版 appium 带的 inspector
3 Macaca 的 app-inspector
以上均可.
我遇到的问题是,这些元素捕获工具好像没有展示当前所捕获界面的 Activity,所以我只能先 带参数-v -v 来从 Maxim 的执行过程日志里找到,登录界面的 Activity
[Maxim] // : debug, currentActivity is com.huasheng.stock.ui.usercenter.LoginUI
同时注意,目前该 Maxim 版本,若要使用该 max.xpath.actions 配置,还需要将配置好的 max.xpath.actions push 到手机
D:\Maxim>adb push max.xpath.actions /sdcard
max.xpath.actions: 1 file pushed. 0.0 MB/s (744 bytes in0.101s)
同时注意,INPUTTEXT 在匹配到的 xpath 控件中输入 text 指定字符,输入需要提前安装 adbkeyboard , 且还需要在手机中手动设置为当前输入法
该输入法工具 在工程目录 D:\Maxim\test\ADBKeyBoard.apk 下.
D:\Maxim\test>adb installADBKeyBoard.apk
Success
然后我们可以开始执行了:
D:\Maxim>adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar execapp_process /system/bin tv.panda.test.monkey.Monkey -p com.huasheng.stock --uiautomatormix --running-minutes 2 --throttle 680 -v -v
需要注意观察 Special Event 该段读入特殊事件的日志 ,是否读入配置成功.
[Maxim] // Special Event:
[Maxim] // Event1:
[Maxim] // Prob: 1.0
[Maxim] // Actvity: com.huasheng.stock.ui.usercenter.LoginUI
[Maxim] // Step0:
[Maxim] // XPath: //*[@resource-id='com.huasheng.stock:id/account_num']
[Maxim] // XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@d4cb746
[Maxim] // Action: INPUTTEXT
[Maxim] // Text: 13699901888
[Maxim] // Throttle: 760
[Maxim] // Step1:
[Maxim] // XPath: //*[@resource-id='com.huasheng.stock:id/pwd']
[Maxim] // XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@fa58d07
[Maxim] // Action: INPUTTEXT
[Maxim] // Text: hshshshs
[Maxim] // Throttle: 760
[Maxim] // Step2:
[Maxim] // XPath: //*[@text='鐧诲綍' and @class='android.widget.Button']
[Maxim] // XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@4df5e34
[Maxim] // Action: CLICK
[Maxim] // Text:
[Maxim] // Throttle: 1600
还有,该段日志来确认是否正确启用了 adbkeyboard 输入法
[Maxim] // InputMethod ID: InputMethodInfo{com.android.adbkeyboard/.AdbIME, settings: null}.id
OK 效果出来了.
六(MIX 模式)支持黑控件 黑区域屏蔽
2018.02.28 update
1.(MIX 模式)支持黑控件 黑区域屏蔽
配置 max.widget.black
案例
[
{
"activity":"com.panda.videoliveplatform.activity.MainFragmentActivity",
"xpath": "//[@class='android.widget.TextView' and @text='我的校园' and @resource-id='com.panda.videoliveplatform:id/tv_title']"
},
{
"activity":"com.panda.videoliveplatform.activity.MainFragmentActivity",
"xpath": "//[@class='android.widget.TextView' and @text='车队' and @resource-id='com.panda.videoliveplatform:id/tv_title']",
"index": 0,
"bounds": "[0,633][900,789]"
},
{
"activity":"com.panda.videoliveplatform.activity.MainFragmentActivity",
"bounds": "[0,1107][900,1263]"
}
]
当且仅当 当前 activity == 所配 activity 或未配 activity 时 做黑检查
三种方式:
1.仅配置 bounds
屏蔽某个区域,在该区域内的控件或坐标不会被点击。
2.配置 xpath
查找匹配的控件,屏蔽点击该控件。
3.xpath+bounds
查找匹配的控件,当控件存在时屏蔽指定的区域。
注 配置完成后请贴在 json.cn 检查格式,注意” : , 非中文
将该文件 push 到 /sdcard/max.widget.black
以上是作者的更新,接下来我们来体验:
在工程目录下 D:\Maxim git pull 更新后,我们需要重新向连接的手机 push framework.jar 和 monkey.jar
先优先编辑好 max.widget.black 配置 注意格式 和 英文符号编写
xpath 就不多说了
今天来指导下什么是 bounds 属性,实际就是坐标值,在 appium API 我们经常会用到 tap 模拟手指点击
tap(self,positions,duration=None) 中的 positions 就是 bounds 属性坐标值.
如确定按钮的 bounds 属性坐标值.
如退出提示弹窗的 bounds 属性坐标值. 同样某一区域也有 bounds 属性坐标值,这样就可以屏蔽不点击某一 activity 下属的某一区域了.
编辑完同样需要将该文件 push 到 /sdcard
adb push max.xpath.actions /sdcard
好了 剩下的 就很简单了. 我就不啰嗦了.
七 TROY 模式(支持特殊事件、黑控件等)
2018.03.22 update
TROY 模式(支持特殊事件、黑控件等)配置 max.xpath.selector troy 控件选择子来定制自有的控件选择优先级,例子如下
[
{
"firstList":
[
{ "xpath": "//[contains(@text,'绝地求生')]" }
],
"selectList":
[
{ "xpath": "//[@clickable='true']" },
{ "xpath": "//[@clickable='true']//[contains(name(),'Text')]" },
{ "xpath": "//[@clickable='true']//[contains(name(),'Button')]" },
{ "xpath": "//[@clickable='true']//[contains(name(),'Image')]" }
],
"lastList":
[
{ "xpath": "//[../[@selected='true']]" },
{ "xpath": "//[../..//[@selected='true']]" },
{ "xpath": "//[../..//[@selected='true'] and contains(@resource-id,'tab_')]" },
{ "xpath": "//[contains(@resource-id,'HorizontalScrollView')]" }
],
"blackList":
[
{ "xpath": "//[contains(@resource-id,'wrapper_in_custom_title_bar')]//[contains(@resource-id,'right_button')]" },
{ "xpath": "//[contains(@resource-id,'share')]" }
]
}
]
控件选择策略 会按 1first 2select 3last 并屏蔽 black 来执行遍历操作。
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
另注 max.xpath.selector 需要 push 到/sdcard/
android monkey 工具,Maxim-高速 Android Monkey 工具使用记录相关推荐
- android服务器压力测试工具,Android自动化压力测试图解教程——Monkey工具
有时候我们需要对一个软件进行压力测试,检查该软件的性能.如果是人工进行测试的话,效率会低很多,而且会比较枯燥.这时,中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作. 一.Monk ...
- 【金阳光测试】--深入Monkey工具和使用--Android系列(3)2014年八月八号
网上介绍Monkey用法不计其数.我也不想炒剩饭,写的和他们一样.Monkey基本原理是伪随机算法.这个算法我想大致介绍下(不感兴趣的朋友情无视它).伪随机数,或称伪乱数,是使用一个确定性的算法计算出 ...
- 行意天下正文 Android Day02-Android中单元测试(junit测试)monkey测试
Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <mani ...
- java 安卓界面 可视化_Monkey可视化工具开发(android篇)
前几天分享了pc端的monkey可视化工具,今天来分享一下如何用android实现monkey的运行,原理是执行shell命令,各种传参,该工具需要root授权 先附上两个效果图: image.png ...
- android系统(9)---android工具网站
网站介绍:http://www.androiddevtools.cn/ AndroidDevTools 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程 ...
- Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材
AndroidDevTools AndroidSDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6:mirrors.opencas.cn端口:80 IPV4/IPV6:mirr ...
- Monkey工具使用-安卓压测工具
文章目录 环境配置 1.JDK安装配置 2.Android Studio开发环境安装 3.adb安装配置 使用操作 1.连接真机调试 2.检测连接设备 3.安装测试包 4.执行测试 5.命令介绍 6. ...
- 【转】 Android快速开发系列 10个常用工具类 -- 不错
原文网址:http://blog.csdn.net/lmj623565791/article/details/38965311 转载请标明出处:http://blog.csdn.net/lmj6235 ...
- github snap android,GitHub - albuer/heapsnap: HeapSnap 是一个定位内存泄露的工具,适用于Android平台。...
HeapSnap 1.HeapSnap 是什么 HeapSnap 是一个定位内存泄露的工具,适用于Android平台. 主要特性如下: 对系统负载低 不需要修改目标进程的源代码 支持Andoroid上 ...
最新文章
- redis入门(03)redis的配置
- 一步一步学lucene——(第四步:搜索篇)
- php mysql记录用户行为_PHP实现用session来实现记录用户登陆信息
- ie,火狐下滚动条的问题
- AMD、CMD、CommonJS、ES6(import/export)
- Java Web项目的保存和刷新
- 【模型加速】TensorRT安装、测试及常见问题
- python利用gzip压缩解压缩StringIO
- 【Python实例第15讲】分类概率图
- 笔记本电脑怎么清理灰尘_笔记本电脑卡顿,运行慢,似中病毒,看这里 小白教你轻松搞定...
- 【车牌识别】基于matlab GUI模板匹配车牌库识别【含Matlab源码 416期】
- 后台管理系统--毕业设计02
- 调试笔记:BSOD 0xA
- 算法设计 分治法 快速排序 C语言实现
- OFDM 调制系统框图 OFDM
- 什么是WebP图片格式?如何在线把Webp格式转换为JPEG格式?
- 基于jQuery实现弹幕效果
- Emgucv图像处理二
- 【CV】膨胀卷积详解以及时间卷积网络TCN论文笔记和源码实现
- matlab在电力电子的应用,MATLAB在电力电子仿真中的应用