【App自动化测试】(十七)遍历测试工具——Android Maxim

news2025/1/24 8:24:15

目录

  • 1. Android Maxim介绍
  • 2. Android Maxim使用方法
  • 3.Android Maxim运行命令
  • 4.Android Maxim的策略
  • 5.实例演示——Windows系统,使用AVD模拟器,系统 Android6.0


1. Android Maxim介绍

Android Maxim是基于遍历规则的高性能Android Monkey,适用于真机/模拟器的APP UI压力测试。对以下内容进行改进:

  • Android Maxim有自己的遍历规则,可以使用几个变量规则去优化Monkey 的操作。
  • Android Maxim的性能高,而且还支持Monkey的相关命令。

2. Android Maxim使用方法

  • 第一步:去官方clone Maxim的github:http://github.com/zhangzhao4444/Maxim

    注意:Maxim不是所有都开源的

  • 第二步:将 framework.jar , monkey.jar push 到手机上某个目录中,建议/sdcard

    • adb push framework.jar /sdcard

    • adb push monkey.jar /sdcard

3.Android Maxim运行命令

adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p [App包名] --uiautomatormix`` --running-minutes [执行时间] -v -v
  • CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar:设置两个jar包的路径

  • exec app_process /system/bin tv.panda.test.monkey.Monkey:固定写法。执行app_process,/system/bin tv.panda.test.monkey.Monkey是Monke的入口函数。

  • -p [App包名] :指定要运行的包名,例如:-p com.xueqiu.android表示运行雪球app

  • --uiautomatormix:遍历策略,表名使用Mix模式,uiautomator和monkey混合使用策略。

  • --running-minutes [运行时长]:设置运行时长,单位分钟。例如:--running-minutes 60 表示运行时长为60分钟

  • -v -v:详细日志

4.Android Maxim的策略

  1. 模式 Mix

    • 基于事件概率的压力测试
    • 参数--uiautomatormix
    • 说明
      • 直接使用底层accessibiltyserver获取界面接口解析各控件
      • 随机选取一个控件执行touch操作。
      • 同时与原monkey 其他操作按比例混合使用
        • 默认accessibilityserver action占比50%,其余各action分剩余的50%
        • 参数--pct-uiautomatormix [百分比]
          • 使用此参数可设置accessibilityserver action占比。
          • 例如 --pct-uiautomatormix 80,是将accessibilityserver action占比提高到80%
  2. 模式 DFS

    • 深度遍历算法
    • 参数:--uiautomatordfs
    • 注意:Android5 不支持 dfs
  3. 模式Troy:

    • 控件选择策略按max.xpath.selector配置的高低优先级来进行深度遍历

    • 参数:--uiautomatortroy

5.实例演示——Windows系统,使用AVD模拟器,系统 Android6.0

  1. 第一步:克隆Maxim项目
  • 进入要放置Maxim项目的文件夹中,选择空白处右击然后选择GitBash,输入命令:

    git clone https://github.com/zhangzhao4444/Maxim.git

在这里插入图片描述

  • Maxim已经成功clone下来:
    在这里插入图片描述
  1. 第二步:启动AVD,运行命令,将两个重要jar包(framework.jar和monkey.jar)push到模拟器中

注意:

  1. push的时候不要使用Git Bash,因为Git Bash会把命令中的"/"当做系统的C盘(Windows)。使用Windows自带的Powershell进行push操作即可。

  2. push的时候先进入Maxim文件夹下,或者可以在push的时候写全framework.jar和monkey.jar的路径

  • 使用adb push .\framework.jar /sdcardadb push .\monkey.jar /sdcard 命令将两个jar包push到模拟器中:

在这里插入图片描述

  • 验证模拟器中是否存在两个jar包:

    查看后可发现两个jar已经被成功push到模拟器中:
    在这里插入图片描述

  1. 运行执行Maxim的命令
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
  • 执行运行命令,把包名修改成我们要测试的软件:雪球。可以根据自己需求添加参数,或修改其他参数。

在这里插入图片描述

  • 运行日志展示(部分):

    version:1.0.21.0612.2259
    
    
                ..                    ..:.
               ..t..     Maxim      .h..
                ..i..  . ....... .  ..si
                  sandroidmonkeystreste
                  .sttoolMaxim.thistool.
               .helpyoutofoundappcrash.thi
             ..stooluserandomordfsalgorithm:.
            .smonkeyMaxim machine gunmonkey..
          ..monkey,..,monkeymonkeym,..,onkeym.
          .onkeymon..keymon.keymonke..ymonkeym.
          ,onkeymonkeymonkeymonkeymonkeymon.key.
         .monkeymonkeymonkeymonkeymonkeymonkeym.
         .onkeymonkeymonkeythxforphdguxiaotian.:
         .anythingUcancontactpanda_zzaqq77227005
          .                                   .
    
          .                                   .
    
    [Maxim] // Monkey: seed=1668811682454 count=1000
    
    
    
    [Maxim] // Selecting main activities from category android.intent.category.LAUNCHER
    [Maxim] // - Not Using main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts
    [Maxim] // - Not Using main activity com.android.dialer.DialtactsActivity (from package com.android.dialer
    [Maxim] // - Not Using main activity com.android.settings.Settings (from package com.android.settings[Maxim] // - Not Using main activity com.android.browser.BrowserActivity (from package com.android.browser
    [Maxim] // - Not Using main activity com.android.calendar.AllInOneActivity (from package com.android.calendar
    [Maxim] // - Not Using main activity com.android.deskclock.DeskClock (from package com.android.deskclock
    [Maxim] // - Not Using main activity com.android.email.activity.Welcome (from package com.android.email
    [Maxim] // - Not Using main activity com.android.camera.GalleryPicker (from package com.android.gallery
    [Maxim] // - Not Using main activity com.android.camera.Camera (from package com.android.camera
    [Maxim] // - Not Using main activity com.android.music.MusicBrowserActivity (from package com.android.music
    [Maxim] // - Not Using main activity com.android.messaging.ui.conversationlist.ConversationListActivity (from package com.android.messaging
    [Maxim] // - Not Using main activity com.example.android.apis.ApiDemos (from package com.example.android.apis
    [Maxim] // - Not Using main activity com.android.gesture.builder.GestureBuilderActivity (from package com.android.gesture.builder
    [Maxim] // - Not Using main activity com.android.widgetpreview.WidgetPreviewActivity (from package com.android.widgetpreview
    [Maxim] // - Not Using main activity com.android.backuptester.MainActivity (from package com.android.backuptester
    [Maxim] // - Not Using main activity com.android.calculator2.Calculator (from package com.android.calculator2
    [Maxim] // - Not Using main activity com.android.customlocale2.CustomLocaleActivity (from package com.android.customlocale2
    [Maxim] // - Not Using main activity com.android.development.Development (from package com.android.development
    [Maxim] // - Not Using main activity android.app.AliasActivity (from package com.android.development_settings
    [Maxim] // - Not Using main activity com.android.providers.downloads.ui.DownloadList (from package com.android.providers.downloads.ui
    [Maxim] // - Not Using main activity com.android.quicksearchbox.SearchActivity (from package com.android.quicksearchbox
    [Maxim] // - Not Using main activity io.appium.settings.Settings (from package io.appium.settings
    [Maxim] // + Using main activity com.xueqiu.android.view.WelcomeActivityAlias (from package com.xueqiu.android)
    [Maxim] // Selecting main activities from category android.intent.category.MONKEY
    [Maxim] // - Not Using main activity com.android.launcher3.Launcher (from package com.android.launcher3
    [Maxim] // - Not Using main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings
    [Maxim] // - Not Using main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings
    [Maxim] // Add Package To PackageWhiteList : com.oppo.camera
    [Maxim] // Add Package To PackageWhiteList : com.android.packageinstaller
    [Maxim] // Add Package To PackageWhiteList : com.android.documentsui
    [Maxim] // AllowPackage: com.xueqiu.android
    [Maxim] // AllowPackage: com.oppo.camera
    [Maxim] // AllowPackage: com.android.packageinstaller
    [Maxim] // AllowPackage: com.android.documentsui
    [Maxim] // IncludeCategory: android.intent.category.LAUNCHER
    [Maxim] // IncludeCategory: android.intent.category.MONKEY
    [Maxim] // Special Event:
    [Maxim] // Black Widget List:
    [Maxim] // InputMethod ID: InputMethodInfo{com.android.inputmethod.latin/.LatinIME, settings: com.android.inputmethod.latin.settings.SettingsActivity}.id
    [Maxim] // Device Info: unknown-Android SDK built for x86_64, Android Version: 6.0
    [Maxim] strategy : uiautomator-Mix.
    
    
    
    [Maxim] // Targeted packages and permissions:
    [Maxim] //
    [Maxim] // Fuzz Null Intent:
    [Maxim] //   com.xueqiu.android.common.splash.SplashActivity
    [Maxim] //   com.xueqiu.android.view.WelcomeActivityAlias
    [Maxim] //   com.xueqiu.android.community.PostStatusActivity
    [Maxim] //   com.xueqiu.android.community.AccountBindingActivity
    [Maxim] //   com.xueqiu.android.message.SelectTalkActivity
    [Maxim] //   com.xueqiu.android.common.account.LoginActivity
    [Maxim] //   com.xueqiu.android.wxapi.WXEntryActivity
    [Maxim] //   com.xueqiu.android.wxapi.WXPayEntryActivity
    [Maxim] //   com.xueqiu.android.stock.stockdetail.StockDetailShortcutActivity
    [Maxim] //   com.xueqiu.android.base.push.PushIntentActivity
    [Maxim] //   com.xueqiu.fund.commonlib.FundMainActivity
    [Maxim] //   com.sina.weibo.sdk.share.WbShareTransActivity
    [Maxim] //   com.sina.weibo.sdk.share.WbShareToStoryActivity
    [Maxim] //   com.alipay.sdk.app.PayResultActivity
    // Event percentages:
    //   TOUCH : 62.5%
    //   MOTION : 10.0%
    //   PINCHZOOM : 4.0%
    //   TRACKBALL : 5.0%
    //   ROTATION : 5.0%
    //   PERMISSION : -0.0%
    //   NAV : -0.0%
    //   MAJORNAV : -0.0%
    //   SYSOPS : -0.0%
    //   APPSWITCH : 1.0%
    //   FLIP : 1.0%
    //   ANYTHING : -0.0%
    //   BACK : 10.0%
    //   MUTE : 1.0%
    //   SCHEMA : -0.0%
    //   NULLINTENT : 0.2%
    //   RESET : 0.3%
    [Maxim] // event0, 2022-11-17 03:16:35.732
    [Maxim] // Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.xueqiu.android/.view.WelcomeActivityAlias;end
    [Maxim] // the top activity is com.xueqiu.android.view.WelcomeActivityAlias, phone launcher activity is com.android.launcher3.Launcher
    [Maxim] // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xueqiu.android/.view.WelcomeActivityAlias } in package com.xueqiu.android
    [Maxim] // : debug, currentActivity is com.xueqiu.android.common.MainActivity
    [Maxim] // event1, 2022-11-17 03:16:35.754
    [Maxim] // Sleeping for 0 milliseconds
    [Maxim] // event1, 2022-11-17 03:16:35.755
    [Maxim] // Sleeping for 6000 milliseconds
    [Maxim] // event1, 2022-11-17 03:16:41.758
    [Maxim] // Sleeping for 0 milliseconds
    [Maxim] Random Number = 0.80452955
    [Maxim] random hit trackball
    [Maxim] // event1, 2022-11-17 03:16:41.787
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(3.0,64.0)
    [Maxim] // event2, 2022-11-17 03:16:41.797
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(-5.0,64.0)
    [Maxim] // event3, 2022-11-17 03:16:41.799
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(-3.0,64.0)
    [Maxim] // event4, 2022-11-17 03:16:41.802
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(-3.0,64.0)
    [Maxim] // event5, 2022-11-17 03:16:41.803
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(-3.0,64.0)
    [Maxim] // event6, 2022-11-17 03:16:41.808
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(3.0,64.0)
    [Maxim] // event7, 2022-11-17 03:16:41.810
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(4.0,64.0)
    [Maxim] // event8, 2022-11-17 03:16:41.816
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(-2.0,64.0)
    [Maxim] // event9, 2022-11-17 03:16:41.818
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(-3.0,64.0)
    [Maxim] // event10, 2022-11-17 03:16:41.822
    [Maxim] :Sending Trackball (ACTION_MOVE): 0:(3.0,64.0)
    [Maxim] Random Number = 0.6914952
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/572878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的毕业生信息招聘平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

Elasticsearch常用接口使用说明以及postman调用调试

查看集群状态 接口url:http://xxxx:9200/_cat 查看所有索引 http://xxxx:9200/_cat/indices?v 创建索引 http://xxxx:9200/test-20230526?pretty 返回值 { "acknowledged": true, "shards_acknowledged": true, "index": &quo…

Opencv-C++笔记 (2) : opencv的矩阵操作

文章目录 创建与初始化1.1 数据类型1.2 基本方法1.3 初始化方法 矩阵加减法矩阵乘法矩阵转置矩阵求逆矩阵非零元素个数矩阵均值与标准差矩阵全局极值及位置GEMM 通用矩阵乘法Transform 对数组每一个元素执行矩阵变换MulTransposed 计算数组和数组的转置的乘积Trace 返回矩阵的迹…

WIN10:Cognos10.2_x32安装

一、Cognos BI Server 10.2 32Bit 二、Cognos Transformer 10.2 三、Cognos Framework Manager 10.2 四、环境 1、如果使用Cognos自带的Tomcat web容器,将E:\common\Cognos\c10\webcontent下的所有文件拷贝到E:\common\Cognos\c10\webapps\p2pd 下面.(一般我们就使…

redis高级篇 缓存双写一致性之更新策略

闲聊 缓存通用查询3部曲 redis 中数据,返回redis 中的数据redis 中没有,查询数据库并返回完成第二部的同时,将数据库查询结果写到redis,redis和数据库数据一致. 谈谈双写一致性的理解 1.如果redis 中有数据:需要和数据库中的相…

什么是可视化开发平台?拥有什么优势?

随着科技的进步和发展,可视化开发平台拥有广阔的市场前景,在提升企业办公企业效率、做好数据管理等方面具有自身的特色和优势。在办公自动化发展的年代,低代码开发平台是助力企业实现提质增效办公效率的得力助手,其可视化、易操作…

Windows操作系统存储管理——实存管理和虚存管理

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows操作系统存储管理——实存管理和虚存管理。 存储器管理的对象是主存(内存)。重点是要知道实存和虚存的管理,而虚存管理重点是逻辑地址和物理地址间的转…

桥梁结构健康监测解决方案

城市桥梁担负着城市的交通和运输网络的重要角色,是城市生命线的重要组成部分。然而,随着时间的推移和日益增长的负荷,桥梁可能会受到各种因素的损害,如自然灾害、疲劳、腐蚀等。因此,桥梁结构健康监测变得至关重要&…

osg给osg::Geometry(自己绘制的几何体)添加纹理(二)

目录 1. 前言 2. 自会集合体贴纹理 2.1. 一张图贴到整个几何体 2.2. 几何体每个面贴不同的图片纹理 3. 说明 1. 前言 前文讲述了如何给osg自带的几何体,如:BOX等,添加纹理,文章参考链接如下: osg给osg::Geometry&…

6步带你弄懂敏捷软件开发管理

敏捷开发是一种项目管理和软件开发的迭代方法,可帮助团队较快地为客户创造价值,同时减少问题。为了获得好处,软件项目团队需要知道如何正确使用敏捷管理方法。 了解敏捷宣言 敏捷宣言阐述了基本的价值观,还详细说明了敏捷团队应…

【云计算与虚拟化】第五章—— vCenter Server 5.5 的高级功能(三)

第五章—— vCenter Server 5.5 的高级功能(三) 1.使用vsphere client 登陆vcenter服务器,创建一个群集,名称为自己的学号,(截图) 2.针对该群集打开HA功能(截图) 3.接入控制策略选择…

【Linux安装】从无到有!在VM虚拟机上安装Linux

系列文章目录 文章目录 系列文章目录准备工作1、Linux阿里云iso镜像: [Centos7.9.2009](http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.5ec0f5adDd8whz) 一、在虚拟机上开辟空间 这里使用VM15做安装例子,16也同样适用1、打开VM 点…

ORB-SLAM内的卡方检验

ORB-SLAM内的卡方检验 1. 概念2. 卡方检验的基本思想3. 卡方检测示例4. ORB-SLAM2中卡方检测剔除外点的策略4.1 示例,卡方检验计算置信度得分: CheckFundamental()、CheckHomography() Reference: 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)卡方检…

chatgpt在复杂问题的回答表现

2023年东南大学论文:Evaluation of ChatGPT as a Question Answering System for Answering Complex Questions 代码库已经无法访问了:https://github.com/tan92hl/Complex-Question-Answering- Evaluation-of-ChatGPT 1.简介 复杂问题的回答&#xff…

ROS学习——在rviz中调用电脑摄像头

一、安装相关软件包 安装uvc camera sudo apt-get install ros-kinetic-uvc-camera安装image相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view 要记得把kinetic换成 你自己的ros版本。 二、启动ros,调用…

我国中央商务区(CBD)的空间重构及发展模式

中央商务区(Central Business District,简称为CBD),原始意义为“商业会聚之地”是指一个国家或城市商务活动的主要集中的区域,是汇聚商务服务、金融服务、科技服务、咨询服务、会展服务、文化服务等服务业的集聚区域&a…

科海思针对锂盐溶液/锂电废水除钙镁、除硼、除铊的解决方案

碳酸锂是锂电行业阳极生产中的一个重要原材料,主要用于制造钴酸锂、镍酸锂、锰酸锂等电极材料,在充电锂电池中也用作非水溶液电解质等,具有良好的电化学性能,应用领域还在不断扩大。 工业级碳酸锂主含量(Li2CO3&#…

es elasticsearch 八 mapping 映射 、复杂数据类型

目录 Mapping 映射 复杂数据类型 Mapping 映射 精确匹配 必须和对应字段值安全一致才可查出 全文检索 缩写搜索全程、格式转换 大小写 同义词 全文检索核心原理 分词,初步的倒排索引的建立 重建倒排索引 时态转换、重复数的转换、同义词的转换、大小写的转换 …

公文写作素材:工作落实类过渡句50例

1.再美的发展蓝图,如果不能落到实处,都是纸上谈兵;再大的奋进决心,如果没有实际行动,对工作毫无益处。 2.会议提出的任务再明确不落实只是纸上谈兵,会议出台的措施再可行不担当只是空中楼阁。 3.既要有不…

buildroot简介

网址 官网:https://buildroot.org/ 下载地址:https://buildroot.org/download.html 使用 解压后,执行make menuconfig Target options (目标板配置) Target Architecture: 目标架构&#…