Monkey_Maxim 遍历测试工具

Monkey_Maxim 遍历测试工具

1. 简介

Maxim 是基于 Monkey 二次开发的工具,是基于遍历规则的高性能的 Android Monkey,可以对真机/模拟器实现 APP UI 压力测试。相比原始的 Monkey 工具,新增了一些定制化功能:

  • 多种随机测试模式,如 DFS 模式(增加深度遍历算法),Mix 混合模式(直接使用底层 accessibiltyserver 获取界面接口 解析各控件,随机选取一个控件执行touch操作),Troy模式(按照控件选择策略进行高低优先级进行深度遍历)
  • 可以设置执行时长
  • 可以自定义 Activity 黑白名单
  • 兼容多个 Android 版本
  • 防跳出,防休眠,防假死等

项目地址:https://github.com/zhangzhao4444/Maxim

2. 环境安装

  • 支持 Android 5,6,7,8,真机及模拟器; Android 5 不支持 dfs mode
  • 将 framework.jar,monkey.jar 放到手机上某个目录中,建议放置到手机的/sdcard目录下,命令如下:
adb push framework.jar /sdcard
adb push monkey.jar /sdcard

3. 用法

下载 AppetizerIO:APP测试->UI压力测试,支持多种模式,黑白名单,所有配置文件(自动 JSON 语法查错),测试开始前自动 push 配置文件。

  • 测试过程log实时更新
  • 一键错误log上报作者

图片说明

图片说明

图片说明

3.1 命令行模式

cmd 命令 :

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar \
exec app_process /system/bin tv.panda.test.monkey.Monkey \
-p com.panda.videoliveplatform --uiautomatormix \
--running-minutes 60 -v -v
  • tv.panda.test.monkey.Monkey: monkey 入口类,不要修改
  • com.panda.videoliveplatform: 被测 App 的包名,需要修改为测试的包名
  • --uiautomatormix: 遍历策略

3.2 策略

DFS模式 深度遍历算法

命令行执行时通过增加参数--uiautomatordfs,添加深度遍历算法。

  • 用法:

在命令行增加参数--uiautomatordfs,添加深度遍历算法。

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.xueqiu.android --uiautomatordfs 5000

Mix模式 混合模式

在命令行增加参数--uiautomatormix直接使用底层 accessibiltyserver 获取界面接口解析各控件,随机选取一个控件执行 touch 操作。

同时与原 monkey 其他操作按比例混合使用。默认 accessibilityserver action 占比 50%,其余各 action 分剩余的 50%,accessibilityserver action 占比可配置--pct-uiautomatormix n。

用法:

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.xueqiu.android --uiautomatormix --running-minutes 60 -v -v

Troy模式

在命令行增加参数--uiautomatortroy控件选择策略按 max.xpath.selector 配置的高低优先级来进行深度遍历。

配置文件 max.xpath.selector 来控制控件操作的优先级,配置内容如下:

[
{
    "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')]" }
    ]
}
]

控件选择策略会按 firstList,selectList,lastList 顺序执行,并屏蔽 blackList 的元素内容,来执行遍历测试。

运行前需要把文件 max.xpath.selector push 到手机 /sdcard/ 这个路径下。

保留原始monkey参数

比如可以在命令后增加参数-v来打印详细日志,增加参数--throttle控制事件之间的时间间隔。maxim 保留了monkey原有的参数。

用法举例:

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.xueqiu.android --uiautomatormix --running-minutes 3 --throttle 300 -v -v

设置运行时长

命令行可以增加运行时长的参数,来控制整体的执行时间。命令后面增加参数--running-minutes 3整个遍历测试会运行3分钟即停止执行。

用法举例:

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.xueqiu.android --uiautomatormix --running-minutes 3 --throttle 300 -v -v

增加黑控件、黑区域屏蔽

什么叫黑控件,黑区域?比如雪球 App 详情页面,不想点击某个元素,某个区域,可以将这个元素/区域放到黑名单中,不操作这部分内容。

当前页面为配置的 activity 时,做黑控件、黑区域检查有下面三种方式:

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

注意:配置完成后贴在 json.cn 检查格式不报错说明格式正确,然后将该文件 push 到 /sdcard/max.widget.black 位置。

举例,配置文件max.widget.black内容为如下:

[
{
    "activity":"com.xueqiu.android.stockmodule.stockdetail.StockDetailActivity",
    "bounds": "[0,288][1440,974]"
}
]

注意:上面的activity 页面名称可以通过命令获取adb shell dumpsys window|grep mCurrentFocus。

定义白名单

一旦添加了白名单 ,在每次点击之后会检测跳转的页面,如果跳转的页面不在白名单中,则不进行跳转。

首先创建文件 awl.strings ,将需要添加白名单的页面按行添加到这个文件中,然后将配置文件push到手机中adb push awk.strings。

com.xueqiu.android.common.MainActivity
com.xueqiu.android.cube.CubeActivity

执行命令的时候添加 --白名单参数,命令如下:

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.xueqiu.android --uiautomatormix --running-minutes 60 --act-whitelist-file /sdcard/awl.strings -v -v  --throttle 500

注意:上面的 activity 页面名称可以通过命令获取adb shell dumpsys window|grep mCurrentFocus。

小结

以上,我们熟悉了 Monkey_Maxim 遍历测试工具的使用。接下里,进一步掌握多平台自动遍历测试工具 AppCrawler 的使用。

<p> 专刊包含了10+年经验测试架构师对测试职业发展的深度解读 帮助你掌握当下 BAT 流行的 App 自动化测试技术基础技能和工具使用;以及从入门到进阶的自动化测试实战经验,在面试中能够脱颖而出。 本专刊购买后即可解锁所有章节,故不可以退换哦~ </p> <p> <br /> </p> <p> <br /> </p>

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务