赞
踩
目录
1.1.2 方式二:使用brew 安装 Android SDK
四、查看应用的包名papackage与页面的Activity
4.1 mac 查看 包名papackage与页面的Activity
4.2 win 查看 包名papackage与页面的Activity
8.1 Android adb bugreport工具分析和使用
十三、python GUI编程(tkinter)基于adb 编写安卓助手
可以去官网下载,官网要是不方便下载的话,用下面这个下载地址:
下载完成后配置环境变量,(自行百度吧)
mac 安装配置android sdk_拾玖ᵛᵃᵉ的博客-CSDN博客_mac安装android sdk
1、安装好brew后,通过以下命令进行sdk的安装。没有安装brew,需要先安装brew。
brew install android-sdk
2、查看是否已安装成功,在终端执行:android
安装成功。
3、配置SDK的环境变量
查看sdk安装路径:
brew list android-sdk
我电脑android sdk 安装路径为:
/opt/homebrew/Caskroom/android-sdk
编辑环境变量文件.bash_profile文件
vim ~/.bash_profile
配置环境变量
- export ANDROID_HOME=/opt/homebrew/Caskroom/android-sdk
- export PATH=$PATH:$ANDROID_HOME/tools
- export PATH=$PATH:$ANDROID_HOME/platform-tools
使配置立即生效:
source ~/.bash_profile
注意
mac电脑,一定要搞清楚自己要修改
~/.bash_profile 还是要修改 vim ~/.zshrc 文件
mac修改环境变量的两种方式_傲娇的喵酱的博客-CSDN博客_mac 修改环境变量
验证环境变量是否配置成功:
adb version
安装成功。
可以去官网下载,官网要是不方便下载的话,用下面这个下载地址:
http://tools.android-studio.org/index.php/sdk
下载完成后,配置环境变量。(自行百度吧)
为啥要安装Android studio呢?
我们有一些场景用到Android studio,比如内存分析,以及在测试过程中,log的查看,开发可能打了很多日志,我们通过Android studio 可以查看到开发的日志,方便我们定位问题。
Android studio 不着急下载安装,啥时候用到再去下载安装,前期这一章节可以跳过去。
mac电脑安装Android studio_遛马的博客-CSDN博客_mac安装android studio
Android studio 官网:
Download Android Studio & App Tools - Android Developers
下载之前查一下电脑的芯片,用的是apple的还是intel,我用的apple芯片,点击
Mac with Apple chip
下载完成后,点击dmg安装,
选择do not impot
Android studio 官网:
Download Android Studio & App Tools - Android Developers
下载完成后,剩下的自行百度吧,太杂了,也没啥技术含量。
Android Studio连接真机调试APP_xcj1409385086的博客-CSDN博客
只有 Windows 需要 Google USB 驱动程序, Mac OS X 或 Linux 上开发,则不需要 USB 驱动程序。
adb全称是Android Debug Bridge,它是一个命令行工具,通过它可以与Android设备进行交互,可以进行常见的安装/卸载app、打开app、查看app的日志等操作。
通过Android sdk安装。1.下载AndroidSDK 2.配置adb环境变量。
如果我们完成了第一章节 安装Android SDK ,就不用再安装adb了,可以直接用。
如果我们完成了第一章节 安装Android SDK ,就不用再安装adb了,可以直接用。
也可以单独使用homebrew安装adb
如果已经安装了homebrew,就不用执行安装homebrew命令了
安装homebrew:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装adb:
使用以下命令,如果第一个命令报错,就使用第二个。
brew cask install android-platform-tools
brew install android-platform-tools --cask
安装成功:
再次输入adb devices 显示安装成功
手机打开开发者模式,连接数据线,允许设备调试。
usb连接方式为数据传输模式
adb devices
查看连接设备
无线连接的方法:(大概就是以下方法,具体可以自行百度)
电脑与测试机处于同一局域网中,通过为测试机设置端口号做唯一映射
adb -s 设备号 tcpip 5556
adb connect 设备IP:5556
进入android设备关于手机页面,红框中标识即为设备IP
此时cmd命令窗口中输入adb deveices回车,可正常返回该设备的连接信息即为连接成功
- 1.adb常用命令
-
- #连接手机
-
- adb devices -l
-
- #安装APP
-
- adb install name.apk
-
- #卸载APP
-
- adb unnistall 包名
-
- #解锁屏幕
-
- adb shell input keyevent 26
-
- #点击触屏
-
- adb shell input tap 500 500
-
- #输入字符
-
- adb shell input text abc
-
- #登录android
-
- adb shell
-
- #从Android拷贝资料到PC
-
- adb pull /sdcard/DCIM/Camera/文件名 /Users/lenov
-
- #从PC端拷贝资料到设备
-
- adb push /Users/lenov/文件名 //sdcard/DCIM/Camera
-

为啥要查看应用的包名papackage与页面的Activity?
因为我们在写自动化的时候,很多参数都需要指定应用的包名papackage与页面的Activity。
win 与mac 查看应用的包名的命令好像不一致,我使用的是mac,所以用mac的命令,我也写了win的命令,不过win的命令,执行失败的话,只能自己百度一下了。
注意:在win才有findstr这个命令,mac的命令是grep
方式一:
1、连接手机
2、打开需要查看的app
3、执行命令:
adb shell dumpsys window w |grep / |grep name=
mSurface=Surface(name=com.Test/com)/@0
如上,包名为
com.xxx
主程序入口为:
com.xx.WebActivity
方式二:
在终端中输入命令:
adb shell am monitor
然后打开应用
这个命令只能获取包名。
如果以下命令不正确,就要自己百度去了。
1、aapt
将apk拖放到cmd中
aapt dump badging <apk文件路径>(将apk拖放到此处即可)
2、adb logcat 获取
adb shell "logcat | grep START"
输入这个命令,然后去启动app。
3.dumpsys
(1)启动要查看的程序;
(2)命令行输入:adb shell dumpsys window w |findstr \/ |findstr name=
(3) 命令输入:adb shell dumpsys window | findstr mCurrentFocus
命令查看当前运行的包名和Activity
Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
查看帮助:
adb shell monkey –help
一般在做monkey时,使用以下这个命令就可以了,日志尽量详细一点,将来好分析定位问题。
adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>c:\test.log
--throttle 500
每个时间间隔500毫秒。事件之间的固定延迟,若无该项monkey每个时间之间不会有时间间隔
--ignore-crashes
忽略crash,当指定的应用程序发生崩溃时(Force&Close错误),Monkey继续执行事件。
--ignore-timeouts
忽略超时,当指定的应用程序发生ANR 错误时,Monkey事件继续执行。
--ignore-security-exceptions
当应用程序发生许可错误时(如证书许可,网络许可等),Monkey继续执行事件。
--ignore-native-crashes
忽略本地的crashes
--monitor-native-crashes
监视并报告应用程序发生崩溃的本地代码
--kill-process-after-error
当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进行)
-v
打印log级别,-v越多日志信息越详细,最多支持3个。三个-v,是最详细的。
例如:adb shell monkey -p 包名 -v -v -v 事件总数
我们在执行monkey时,这个-v 日志详细度要设置最大,这样会方便我们定位问题。
monkey执行时长:
monkey没有执行时长的命令,如jmeter,压测十分钟。monkey没有这种功能,这里只能通过换算。
事件总数计算方式=预计运行时长(换算成秒)/间隔时长(换算成秒)
为什么要加忽略:
如果不忽略crash,出现crash,monkey就停了。
如果seed值相同,则两次执行monkey的事件顺序是相同的。
应用场景:
我们在执行monkey时,给一个seed标记。等我们下次需要复现上一次的执行过程时,我们执行monkey命令,带上这个标记,则这一次执行的事件顺序与上一次事件顺序是一致的,就可以复现上一次的步骤。
注意:
两次执行命令,使用相同的seed值,执行过程并不是严格意义上一致的,可能会有不一致的地方,不过这个不重要,我们可以忽略这个。
示例:
第一次执行,1000次。seed值为666
adb shell monkey -p packagename -s 666 1000
第二次执行,为了与上一次执行的逻辑一样,同样适用666为seed值。
adb shell monkey -p packagename -s 666 1000
seed值,如果执行的命令里不指定,在monkey执行时,会生成一个seed值。
monkey的事件都是随机事件,我们这里可以设置每个事件类型发生的百分比。
- 0:触摸事件百分比,即参数--pct-touch
- 1:滑动事件百分比,即参数--pct-motion
- 2:缩放事件百分比,即参数--pct-pinchzoom
- 3:轨迹球事件百分比,即参数--pct-trackball
- 4:屏幕旋转事件百分比,
- 5:基本导航事件百分比,即参数--pct-nav
- 6:主要导航事件百分比,即参数--pct-majornav
- 7:系统事件百分比,即参数--pct-syskeys
- 8:Activity启动事件百分比,即参数--pct-appswitch
- 9:键盘翻转事件百分比,即参数--pct-flip
- 10:其他事件百分比,即参数--pct-anyevent
例如:
adb shell monkey -v -p XXX --pct-touch 1 --pct-motion 2 --pct-trackball 3 --pct-nav 4 --pct-majornav 5 --pct-syskeys 6 --pct-appswitch 7 --pct-anyevent 8
1、. 开启安全设置下的未知来源
2. 手机连接电源充电
3. 若有有关于音频的模块,请插入耳机避免影响其他同事
在执行monkey事件中,手机不会自己熄屏
先执行monkey,获取日志。1000次,每次时间间隔500ms。
adb shell monkey -p comxxx.test --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000>/Users/zhaohui/Desktop/monkeylog.txt
- zhaohui@zhaohuideMacBook-Pro ~ % adb shell monkey -p com.xxx.Test --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000>/Users/zhaohui/Desktop/app.log
- args: [-p, com.szking.kyjj.custTest, --throttle, 500, --ignore-crashes, --ignore-timeouts, --ignore-security-exceptions, --ignore-native-crashes, --monitor-native-crashes, -v, -v, -v, 1000]
- arg: "-p"
- arg: "com.szking.kyjj.custTest"
- arg: "--throttle"
- arg: "500"
- arg: "--ignore-crashes"
- arg: "--ignore-timeouts"
- arg: "--ignore-security-exceptions"
- arg: "--ignore-native-crashes"
- arg: "--monitor-native-crashes"
- arg: "-v"
- arg: "-v"
- arg: "-v"
- arg: "1000"
- data="com.szking.kyjj.custTest"
- arg="--throttle" mCurArgData="null" mNextArg=3 argwas="--throttle" nextarg="500"
- data="500"
- arg="--ignore-crashes" mCurArgData="null" mNextArg=5 argwas="--ignore-crashes" nextarg="--ignore-timeouts"
- arg="--ignore-timeouts" mCurArgData="null" mNextArg=6 argwas="--ignore-timeouts" nextarg="--ignore-security-exceptions"
- arg="--ignore-security-exceptions" mCurArgData="null" mNextArg=7 argwas="--ignore-security-exceptions" nextarg="--ignore-native-crashes"
- arg="--ignore-native-crashes" mCurArgData="null" mNextArg=8 argwas="--ignore-native-crashes" nextarg="--monitor-native-crashes"
- arg="--monitor-native-crashes" mCurArgData="null" mNextArg=9 argwas="--monitor-native-crashes" nextarg="-v"

原文:
指定页面进行monkey 测试_testlyIII的博客-CSDN博客_monkey指定页面测试
前言:
目前大部分的Monkey测试的方式大都无法对独立的模块进行稳定性测试,而每个业务线的入口在测试阶段很难通过原生的Monkey测试(随机性较强)来发现自己模块内crash的问题,针对这个问题,这个工具设计开发的初衷就是为了能够缩小测试范围,在测试阶段指定业务模块内发现和暴露更多的稳定性相关的问题。
解决问题:
当App业务变多的时候之后我们需要对App内的业务模块进行针对性稳定性测试。由于原生的Monkey随机性较强,很难 对指定的Activity进行针对性的monkey测试,Demons的出现就为了解决了这个问题。
原理:
原理其实就是有一个后台任务可用定时巡检PC上所连的每个设备当前运行在哪个页面,如果发现设备已经crash或者当前页面不在我们指定的白名单页面,那么该程序会自动处理当前进程的数据并初始化回到主入口。
工具特点:
jar包git下载地址:
GitHub - 18713341733/MonkeyJava
里面就一个配置文件config.xml 和jar包。
使用方式:
1、将工具下载下来放到本地目录下
2、配置工作目录config.xml文件
第一步,获取app的package,并填写配置文件xml
第二步,获app程序的入口activity,并填写配置文件xml
①:adb shell dumpsys window windows | findstr "mCurrent"
②:adb shell dumpsys activity | findstr "mFocusedActivity"
第三步,获取并输入activity白名单:
①.也可以使用adb logcat -v time -s ActivityManager,点击app功能跳转想要测试的页面,cmd页面就可以刷新获取到跳转页面的activity,然后把activity输入到白名单内
【注:当白名单内的activity的数量大于1的时候,每个activity后面都需要添加英文逗号 “,” ,最后一个不需要添加,否则多个白名单的activity的value就会链接在一起,导致程序检测到与当前页的activity不一致,就一直返回到主页面activity上,影响测试】
需要对指定模块设置白名单,在设置白名单前需要知道当前功能页面的Activity。
在win系统中:
adb shell dumpsys activity | findstr "mFocusedActivity"
注意:在win才有findstr这个命令,mac的命令是grep
验证主入口是否有跳转权限
adb shell am start -n 包名/Activity名
主入口如果配的有问题会出现以下错误,原因是Activity 没有调用权限
根据以上名称查看当前功能的Activity,将该页面配置至白名单,如下图所示。
3、monkey执行
将单个或多个设备连接电脑
打开cmd命令窗口,进入当前jar包所在目录,执行
java -jar monkeyTest.jar
等待初始化完成
再启一个cmd命令窗口,执行monkey命令即可。
缺陷:
每个页面都会有个activity,而且,会出现多个页面共有同一个activity的现象,这样的话,就有个缺陷,如果有个A页面下的B页面,他们的共用同一个activity,我只是想在A页面跑monkey,B页面不跑monkey,这个需求是无法通过这个方法达到的,所以,A、B页面都会测试到,原因就是,他这个是针对activity的测试,只要是白名单里的activity,都是可以测试到的,除非A页面、B页面不共用一个activity。这个技术只是比基本的monkey更细化一点,还无法真正达到指定A页面moneky测试
当我们使用monkey命令执行时:
adb shell monkey -p com.xxx.Test --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000>/Users/zhaohui/Desktop/monkeylog.txt
会在Desktop/生成一个monkeylog.txt文档,这个文档就是monkey记录的日志,包括monkey执行的步骤,app的日志等。
我们在执行monkey后,其实会生成2个日志文件,一个是monkey记录的,一个是adb bugreport记录的。
在我们电脑终端,执行命令。
adb bugreport > bugreport.txt
就可以在当前位置生成一个bugreport.txt文件。
Android adb bugreport工具分析和使用 - Android移动开发技术文章_手机开发 - 红黑联盟
Android系统想要成为一个功能完备,生态繁荣的操作系统,那就必须提供完整的应用开发环境。而在应用开发中,app程序的调试分析是日常生产中进程会进行的工作。Android为了方便开发人员分析整个系统平台和某个app在运行一段时间之内的所有信息,专门开发了bugreport工具。这个工具使用起来十分简单,只要在终端执行(linux或者win):
1.Android系统版本>=8.0,直接使用指令adb bugreport,例如:
- adb bugreport > bugreport.txt
- 或者:
- adb bugreport > C:\Users\ymlu\Desktop\bugreport.txt
2.针对Android系统版本<8.0,终端切至路径C:\Users\ymlu\Desktop\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools下面,运行adb.exe;然后运行adb bugreport即可
即可生成bugreport文件。
bugreport
文件有的时候异常庞大,能够达到15M+,如果我们用文本工具打开一个几十m的txt文件,是一件很痛苦的事情。
实践中发现bugreport只能导出近2小时的日志,所以需要在monkey测试中设置定时任务来定时导出bugreport日志,以便全面分析被测APP在monkey压测过程中出现的问题。
因此google针对android 5.0(api 21)以上的系统开发了一个叫做battery historian的分析工具,这个工具就是用来解析这个txt文本文件,然后使用web图形的形式展现出来,这样出来的效果更加人性化,更加可读。
从bugreport导出手机数据,通过battery-historian解析原始数据进行多维度分析功耗异常
具体使用方式,百度一下吧。
我们通过jar包,也是解析的adb bugreport 产生的数据。
jar包地址:
GitHub - 18713341733/bugreport
命令:
adb bugreport > bugreport.txt
在当前目录生成了一个压缩文件bugreport.zip
解压bugreport.zip。解压之后,有一个文件名称带有日期的txt文件。
类似于bugreport-TAS-AN00-HUAWEITAS-AN00-2022-08-19-11-24-15.txt
我们使用jar包,就是具体解析的这个文件。
将这个文件重命名为 bugreport.txt,然后将jar包与txt文件放在同一目录下,执行
java -jar chkbugreport.jar bugreport.txt
即可在当前目录生成报告。
打开index.html,就是报告
当我们使用monkey命令执行时:
adb shell monkey -p com.xxx.Test --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000>/Users/zhaohui/Desktop/monkeylog.txt
对monkeylog.txt文件的分析
ANR(Application Not Response)是指在Android上,应用程序响应不够灵敏时,系统会向用户显示的一个对话框。 用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。
1、查看monkey的log
2、/data/anr/traces.txt
3、查看logcat日志ANR
在monkey log文件中,搜索ANR,如下图
1、anr发生的页面
2、每个进程的CPU 利用率
adb shell
进入linux 系统
在/data/anr/目录下,有个traces.txt文件
取出这个文件,在电脑终端执行命令
adb pull /data/anr/traces.txt .
分析这个文件。
系统发生ANR,一定会记录在这个文件里。在每次执行稳定性测试时,可以手动清理这个文件。
Monitor 集成了DDMS,也可以单独使用DDMS
在终端输入Monitor ,启动Monitor
看log cat日志
集成了DDMS
1、1点击,出现logcat
2、双击logcat放大
异常Exception 通常伴随着Crash。
1、查看monkey的log日志
2、查看logcat日志Crash
1、按关键字进行搜索,ANR、Exception、Crash
a、无响应问题可以在日志中搜索 “ANR” 。
b、崩溃问题搜索 “CRASH” 。
c、内存泄露问题搜索"GC"(需进一步分析)。
d、异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视)。
2、找到有问题的地方,查看上下文信息
3、重点查看log中第一个switch,Monkey执行的是那一个Activity 上下文信息,有没有报错之类的。一般错误都会显示在这个后面
4、查看monkey里面出错钱的一些事件动作,可以手动执行该动作
5、进行问题复现,可以使之前执行的monkey命令再执行一遍,注意seed值要一致
搜ANR,如果搜索出来的量 很大,那么搜索的时候,ANR后加一个空格,这样结果就会减少。
在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。
报错信息能分析就分析,不能分析就把关键词搜索到的错误信息截图发给开发。
MonkeyScript使用教程 - 清风软件测试 - 博客园
MonkeyScript 是官方提供的,除了像Monkey一样随机乱点之外,还可以通过编写脚本的形式,完成一系列固定的操作。
MonkeyScript 提供一整套完善的 API 来进行支持,主要还是基于坐标点的操作,包含常用的:点击、长按、输入、等待等操作。
MS脚本只要是文本即可,不关心后缀是什么,所以编写时不要添加后缀,保存文本格式即可。
MonkeyScript 执行命令:
adb shell monkey -f <scriptfile> <event-count>
<scriptfile>MonkeyScript 脚本
<event-count> 执行次数
一、DispatchTrackball 轨迹球事件
DispatchTrackball(long downtime,long eventtide,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)
注意:按一个键需要两个轨迹球事件 。
轨迹球常用命令:
1、int action
指具体操作的动作。action: 0代表按下,1代表谈起,一个点击事件,需要执行0和1两个。
2、float x,float y
x 与y 的坐标
以上2个是轨迹球常用命令,需要根据具体情况进行修改。
轨迹球非常用命令:
以下几个命令,在实际使用时,直接复制用就可以了,不用进行修改,所以也不用关注这几个命令是啥意思。
long downtime指键最初被按下的时间
long eventtide 指事件发生的时间
float pressure 压力事件的大小(0-1)
float size 触摸的记事值(0-1)
int metastate 当前按下mate键的标识
二、DispatchPointer 点击事件
按一个键需要2个点击事件
三、DispatchString 输入字符串命令
DispatchString(String text)
四、LaunchActivity 启动应用
LaunchActivity(package,Activity)
五、UserWait 等待事件
UserWait(1000)
单位毫秒
六、DispatchPress 按下键值
DispatchPress(int keycode)
如按下回车键:
DispatchPress(66)
DispatchPress 与 DispatchPointer 区别:
DispatchPointer 点击的是屏幕(坐标)
DispatchPress 点击的是键盘,如点击回车键、点击a键、f键等。
Android KeyCode 列表:
Android KeyCode 列表 - 狐狸已化妖 - 博客园
遇到不知道的键,需要自己去百度一下,以下是部分键的int值。
KEYCODE_CALL | 拨号键 | 5 |
KEYCODE_ENDCALL | 挂机键 | 6 |
KEYCODE_HOME | 按键Home | 3 |
KEYCODE_MENU | 菜单键 | 82 |
KEYCODE_BACK | 返回键 | 4 |
KEYCODE_SEARCH | 搜索键 | 84 |
KEYCODE_CAMERA | 拍照键 | 27 |
KEYCODE_FOCUS | 拍照对焦键 | 80 |
KEYCODE_POWER | 电源键 | 26 |
KEYCODE_NOTIFICATION | 通知键 | 83 |
KEYCODE_MUTE | 话筒静音键 | 91 |
KEYCODE_VOLUME_MUTE | 扬声器静音键 | 164 |
KEYCODE_VOLUME_UP | 音量增加键 | 24 |
KEYCODE_VOLUME_DOWN | 音量减小键 | 25 |
手机设置,打开开发者模式,打开 指针位置,这样我们就可以看到点击的坐标。
下面以测试登录功能为例:
模板:
- type=user
- count = 1
- speed = 1.0
- start data >>
- LaunchActivity(Activity)
- UserWait(1000)
- DispatchPointer(0,0,0,303,312,0,0,0,0,0,0,0)
- DispatchPointer(0,0,1,303,312,0,0,0,0,0,0,0)
- UserWait(1000)
- DispatchString(1234566)
- UserWait(100)
- DispatchPointer(0,0,0,345,393,0,0,0,0,0,0,0)
- DispatchPointer(0,0,1,345,393,0,0,0,0,0,0,0)
- UserWait(100)
- DispatchString(1234567)
- UserWait(1000)
- DispatchPointer(0,0,0,100,100,0,0,0,0,0,0,0)
- DispatchPointer(0,0,1,100,100,0,0,0,0,0,0,0)
- UserWait(1000)
- DispatchPointer(0,0,0,361,507,0,0,0,0,0,0,0)
- DispatchPointer(0,0,1,361,507,0,0,0,0,0,0,0)
- UserWait(3000)

注意:
顶部4行命令,是MonkeyScript 固定的脚本头,需要写在脚本的最前面。
- type=user
- count = 1
- speed = 1.0
- start data >>
在脚本中,脚本头是一直不变动的,为了避免写错,可以直接复制粘贴最保险。
在 start data>> 之后就可以正式开始编写 monkey 脚本了。
在脚本中,使用 #
号,对单行进行注释。
例子二:
type=user
count = 1
speed = 1.0
start data >>
LaunchActivity(com..xxx.tTest,com.xxx)
UserWait(1000)
DispatchPointer(0,0,0,956,2283,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,956,2283,0,0,0,0,0,0,0)
UserWait(1000)
DispatchPointer(0,0,0,402,440,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,402,440,0,0,0,0,0,0,0)
UserWait(1000)
DispatchPointer(0,0,0,342,974,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,342,974,0,0,0,0,0,0,0)
DispatchString(1234566)
UserWait(1000)
DispatchPointer(0,0,0,628,2028,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,628,2028,0,0,0,0,0,0,0)
UserWait(3000)
保存文件,名称为mytset。将脚本从电脑push到手机里。
adb push mytest /sdcard/
我将mytset脚本放到/sdcard/目录下,之后在电脑的终端上执行以下命令:
MonkeyScript 执行命令:
adb shell monkey -f /sdcard/mytest -v 10 > /Users/zhaohui/Desktop/monkey.txt
1、adb shell mkdir /sdcard/script 在设备上创建script文件夹用于存放脚本
2、将本地脚本文件push到设备中上面创建的文件夹中。例如adb push /Users/userName/Desktop/testLogin空格/sdcard/script,/Users/userName/Desktop/testLogin就是你脚本在本地的存放路径。
3、执行
adb shell monkey -f /sdcard/script/你的脚本名称 –v –v 10 >C:\monkey.txt
>C:\monkey.txt为日志输出路径。
例子三:
1、启动APP
2、点击地址栏
3、删除原有地址
4、输入www.baidu.com
5、点击回车
6、点击回车
7、点击搜索框
8、输入字符串test
9、点击回车
10、点击搜索按钮
11、等待搜索结果
- type=user
- count = 1
- speed = 1.0
- start data >>
- LaunchActivity(com,android.browser,com.android.browser.BrowserActivity)
- UserWait(1000)
- DispatchPointer(10,10,0,200,100,1,1,-1,1,1,0,0)
- DispatchPointer(10,10,1,200,100,1,1,-1,1,1,0,0)
- DispatchPress(112)
- DispatchString(www.baidu.com)
- DispatchPress(66)
- UserWait(1000)
- DispatchPointer(10,10,0,300,400,1,1,-1,1,1,0,0)
- DispatchPointer(10,10,1,300,400,1,1,-1,1,1,0,0)
- UserWait(1000)
- DispatchString(test)
- UserWait(1000)
- DispatchPress(66)
- UserWait(1000)

1、adb shell mkdir /sdcard/script 在设备上创建script文件夹用于存放脚本
2、将本地脚本文件push到设备中上面创建的文件夹中。例如adb push /Users/userName/Desktop/testLogin空格/sdcard/script,/Users/userName/Desktop/testLogin就是你脚本在本地的存放路径。
3、执行
adb shell monkey -f /sdcard/script/你的脚本名称 –v –v 10 >C:\monkey.txt
>C:\monkey.txt为日志输出路径。
https://www.jianshu.com/p/30532d06306b
MonkeyRunner工具使用Jpython(使用Java编程语言实现的Python)写出来的。MonkeyRunner是安卓SDK提供的功能。MonkeyRunner在Android_sdk中的位置:tools目录下。
MonkeyRunner 跟monkey没有任何关系。Monkey通过在设备直接运行adb shell命令来生成随机事件进行测试。MonkeyRunner通过API发送特定的命令和事件来控制设备。
MonkeyRunner提供了多个API,通过MonkeyRunner API可以编写一个Python程序来模拟操作控制Android设备App,测试其稳定性并通过截屏记录出现的问题。
MonkeyRunner工具主要设计用于在功能/框架级测试应用程序和设备。支持java脚本和python脚本。
安装好Android SDK后,配置MonkeyRunner环境变量(将MonkeyRunner的路径放入Path)。在cmd中输入MonkeyRunner出现如下显示内容说明安装成功,使用Ctrl+D退出。
MonkeyRunner主要分为三个类:
1、MonkeyRunner:它是一个MonkeyRunner程序提供工具方法的类,这个类提供了用于连接MonkeyRunner到设备或模拟器的方法,同时还提供了用于创建一个MonkeyRunner程序的用户界面以及显示内置帮助的方法。
2、MonkeyDevice:它是一个设备或模拟器的类,这个类提供了安装和卸载程序包、启动一个活动以及发送键盘或触摸事件到应用程序的方法,同时提供也可以用这个类来运行测试包。
3、MonkeyImage:它是一个截图对象的类,这个类提供了截图、将位图转换成各种格式、比较两个MonkeyImage对象以及写图像到文件的方法。
官方文档:http://www.android-doc.com/tools/help/monkeyrunner_concepts.html#
提供连接真机和模拟器、输入、暂停、警告框等方法
API | 功能 |
---|---|
alert() | 警告框 |
choice() | 选项列表框 |
help() | API帮助文档 |
input() | 输入 |
sleep() | 暂停 |
waitFor Connection() | 等待设备连接 |
常用方法:
- from com.android.monkeyrunner import Monkeyrunner as mr
-
- print("connect devices...")
-
- device=mr.waitForConnection(5,'127.0.0.1:62001')
1、alert 警告框
MonkeyRunner.alert(String message,String title,String okTitle)
message: 弹出对话框内容
title:对话框的标题栏显示内容,默认值为“Alert”
okTitle: 对话框的按钮,默认值为“OK"
2、waitForConnection
等待设备连接,多个设备,需要指明哪个设备。
MonkeyRunner.waitForConnection(float timeout,string deviceId)
timeout: 等待超时时间,默认值为永久等待
deviceId:通过设备ID识别手机,如果只有一台手机,不需要输入。
提供安装和卸载程序包、开启activity、发送按键和点击事件、运行测试包等
API | 功能 |
---|---|
broadcastIntent() | 发送广播 |
drag() | 拖动 |
getProperty() | 获取当前设备属性 |
getSystemProperty() | 获取当前设备属性 |
installPackage() | 安装应用 |
instrument | 执行测试用例 |
press() | 按键 |
reboot() | 重启 |
removePackage() | 删除指定Package |
startActivity() | 启动应用 |
touch() | 点击 |
常用方法:
- installPackage(string path)
-
- removePackage(string package)
-
- startActivity(string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)
touch(integer x, integer y, integer type)
touch参数说明:
drag(tuple start, tuple end, float duration, integer steps)
drag参数说明:
用来保存各种格式的测试截图,并可以进行图像对比
API | 功能 |
---|---|
convertToBytes() | 转换图像格式 |
getRawPixel() | 获取当前坐标像素元组 |
getRawPixellnt() | 获取当前坐标像素值 |
sameAs() | 图像对比 |
writeToFile() | 保存图像文件到指定的文件路径 |
getSubImage() | 截取子图像 |
takeSnapshot() | 屏幕截图 |
常用方法:
编写Python测试代码:
- # coding=utf-8
-
- # 引入本程序所用到的模块
- from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
-
- # 连接手机设备
- device = MonkeyRunner.waitForConnection()
-
- # 截图
- result = device.takeSnapshot()
- # 将截图保存到文件
- result.writeToFile('E:\\manage\\Test1_001.png', 'png')
-
- # 卸载APP
- device.removePackage('com.baidu.searchbox')
- print('Uninstall Success!')
-
- # 暂停5秒
- MonkeyRunner.sleep(5)
-
- # 截图
- result = device.takeSnapshot()
- result.writeToFile('E:\\manage\\Test1_002.png', 'png')
-
- # 安装新的APP
- device.installPackage(r'E:\Android_apk\baidusearch1006979t.apk')
- print('Install Success!')
-
- # 暂停5秒
- MonkeyRunner.sleep(5)
-
- # 截图
- result = device.takeSnapshot()
- # 将截图保存到文件
- result.writeToFile('E:\\manage\\Test1_003.png', 'png')

作者:Cyzhouke
链接:https://www.jianshu.com/p/30532d06306b
使用MonkeyRunner连接设备,进行自动安装并启动APP,完成登录功能,并截图保存到指定目录下
步骤:
1、连接设备
2、安装App
3、启动App
4、点击用户名,密码输入框,完成输入
5、点击登录
6、截图
下载考研帮apk
- from com.android.monkeyrunner import MonkeyRunner as mr
-
- from com.android.monkeyrunner import MonkeyDevice as md
-
- from com.android.monkeyrunner import MonkeyImage as mi
-
- #启动服务
- print("-----connect devices-----")
- device=mr.waitForConnection()
- print("-----succeed start-----")
-
- print("-----install app-----")
- device.installPackage(r"F:\kaoyan3.1.0.apk")
- print("-----succeed install-----")
-
- print("-----start App-----")
- package="com.tal.kaoyan"
- activity="com.tal.kaoyan.ui.activity.SplashActivity"
- runComponent=package+"/"+activity
- device.startActivity(component=runComponent)
-
- mr.sleep(3) #等待
-
- #点击取消更新按键
- print("-----click cancel update-----")
- device.touch(726.2,1096.4,"DOWN_AND_UP") #对取消更新按钮执行点击弹起操作
- mr.sleep(3)
-
- #点击跳过
- print("---click skip button---")
- device.touch(982,69,"DOWN_AND_UP") #对跳过按钮执行点击弹起操作
- mr.sleep(3)
-
- #输入账号
- print("input username and password")
- device.touch(194,381,"DOWN_AND_UP") #对用户名输入框执行点击弹起操作
- mr.sleep(1)
- device.type("zxw1234") #输入登录账号
- device.touch(194,472,"DOWN_AND_UP") #对密码输入框执行点击弹起操作
- mr.sleep(1)
- device.type("zxw123456")
-
- #点击登录
- device.touch(550,628,"DOWN_AND_UP")
- mr.sleep(3)
-
- print("-----screen shot-----")
- screenshot=device.takeSnapshot() #截屏
- screenshot.writeToFile(r"C:\Users\k.zhou\Pictures\Saved Pictures\kyb.png","png") #保存图片

工具exe资源下载地址:
pythonGUI编程,基于adb命令编写的安卓助手-Android工具类资源-CSDN下载
源码地址:
https://github.com/18713341733/PhoneAssistant
基于python+adb 编写的安卓助手工具。支持录屏、截图、日志抓取、性能数据查看等功能。目前的功能不是很完善,只是单纯的打个样儿。
大概就是这么一个页面
这个工具是很久之前用python2写的,虽然有点老,但是可以自己手动改改成python3
一、什么是内存泄露、内存溢出,与两者的区别联系
内存泄露 memory leak,是指程序在申请内存后无法释放已申请的内存空间,一次内存泄露危害可以忽略,但是内存泄露堆积后果很严重,无论多少内存迟早会被占光。
内存溢出 out of memory,是指程序在申请内存时没有足够的内存空间供其使用,出现内存溢出;比如申请了一个integer,但给他存了long才能存下的数,这就是内存溢出。
(MAX_VALUE = 0x7FFFFFFFFFFFFFFFL long的最大值/ MAX_VALUE = 0x7FFFFFFF integer的最大值)
memory leak会最终导致out of leak
二:内存泄露的检测工具的种类
1、开发工具Android studio
优点:a:可以很直观的看到应用占用内存波状图与实时内存数据;
b:可以实时查看应用的CPU使用情况;
c:实时查看APP运行日志;
d:截屏功能。
缺点:需要使用debug包连接使用
2、DDMS中VM Heap功能
优点:a:可以分析看到内存泄露出处;
b:可以实时查看应用的CPU使用情况;
c:实时查看APP运行日志;
d:截屏功能。
缺点:a:需要使用debug包连接使用
b:手机端APP性能变差,高概率导致app无响应
三:内存检测工具的使用方法:
Android studio的连接和使用:
1、打开android-studio-bundle-141.2288178-windows.exe安装包安装;
2、手机连接电脑,使用adb devices命令,打开devices视图,确认手机成功连接;
3、启动android studio,Tools->Android->勾选enable ADB integration;
步骤3详见如下附图一:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。