目录
1.1.2 方式二:使用brew 安装 Android SDK
1.2 win安装Android Android SDK
三、adb
四、查看应用的包名papackage与页面的Activity
4.1 mac 查看 包名papackage与页面的Activity
4.2 win 查看 包名papackage与页面的Activity
8.1 Android adb bugreport工具分析和使用
编辑
11.2 MonkeyRunner API介绍&常用命令
十三、python GUI编程(tkinter)基于adb 编写安卓助手
一、安装Android SDK
1.1 mac安装Android SDK
1.1.1 方式一:下载 Android SDK
可以去官网下载,官网要是不方便下载的话,用下面这个下载地址:
下载完成后配置环境变量,(自行百度吧)
1.1.2 方式二:使用brew 安装 Android SDK
1、安装好brew后,通过以下命令进行sdk的安装。没有安装brew,需要先安装brew。
2、查看是否已安装成功,在终端执行:android
安装成功。
3、配置SDK的环境变量
查看sdk安装路径:
我电脑android sdk 安装路径为:
编辑环境变量文件.bash_profile文件
配置环境变量
使配置立即生效:
注意
mac电脑,一定要搞清楚自己要修改
~/.bash_profile 还是要修改 vim ~/.zshrc 文件
验证环境变量是否配置成功:
安装成功。
1.2 win安装Android Android SDK
可以去官网下载,官网要是不方便下载的话,用下面这个下载地址:
http://tools.android-studio.org/index.php/sdk
下载完成后,配置环境变量。(自行百度吧)
二、安装Android studio
为啥要安装Android studio呢?
我们有一些场景用到Android studio,比如内存分析,以及在测试过程中,log的查看,开发可能打了很多日志,我们通过Android studio 可以查看到开发的日志,方便我们定位问题。
Android studio 不着急下载安装,啥时候用到再去下载安装,前期这一章节可以跳过去。
2.1 mac安装Android studio
Android studio 官网:
Download Android Studio & App Tools - Android Developers
下载之前查一下电脑的芯片,用的是apple的还是intel,我用的apple芯片,点击
Mac with Apple chip
下载完成后,点击dmg安装,
选择do not impot
2.2 win电脑安装Android studio
Android studio 官网:
Download Android Studio & App Tools - Android Developers
下载完成后,剩下的自行百度吧,太杂了,也没啥技术含量。
2.3 win电脑安装Android studio 连接真机调试APP
2.4 mac电脑安装Android studio 连接真机调试APP
只有 Windows 需要 Google USB 驱动程序, Mac OS X 或 Linux 上开发,则不需要 USB 驱动程序。
三、adb
adb全称是Android Debug Bridge,它是一个命令行工具,通过它可以与Android设备进行交互,可以进行常见的安装/卸载app、打开app、查看app的日志等操作。
官网:Android Debug Bridge (adb)
3.1 win 安装adb
通过Android sdk安装。1.下载AndroidSDK 2.配置adb环境变量。
如果我们完成了第一章节 安装Android SDK ,就不用再安装adb了,可以直接用。
3.2 mac使用homebrew安装adb
如果我们完成了第一章节 安装Android SDK ,就不用再安装adb了,可以直接用。
也可以单独使用homebrew安装adb
如果已经安装了homebrew,就不用执行安装homebrew命令了
安装homebrew:
安装adb:
使用以下命令,如果第一个命令报错,就使用第二个。
安装成功:
再次输入adb devices 显示安装成功
3.3 手机连接
手机打开开发者模式,连接数据线,允许设备调试。
usb连接方式为数据传输模式
查看连接设备
无线连接的方法:(大概就是以下方法,具体可以自行百度)
电脑与测试机处于同一局域网中,通过为测试机设置端口号做唯一映射
adb -s 设备号 tcpip 5556
adb connect 设备IP:5556
进入android设备关于手机页面,红框中标识即为设备IP
此时cmd命令窗口中输入adb deveices回车,可正常返回该设备的连接信息即为连接成功
3.4 adb常用命令
四、查看应用的包名papackage与页面的Activity
为啥要查看应用的包名papackage与页面的Activity?
因为我们在写自动化的时候,很多参数都需要指定应用的包名papackage与页面的Activity。
win 与mac 查看应用的包名的命令好像不一致,我使用的是mac,所以用mac的命令,我也写了win的命令,不过win的命令,执行失败的话,只能自己百度一下了。
4.1 mac 查看 包名papackage与页面的Activity
注意:在win才有findstr这个命令,mac的命令是grep
方式一:
1、连接手机
2、打开需要查看的app
3、执行命令:
mSurface=Surface(name=com.Test/com)/@0
如上,包名为
com.xxx
主程序入口为:
com.xx.WebActivity
方式二:
在终端中输入命令:
然后打开应用
这个命令只能获取包名。
4.2 win 查看 包名papackage与页面的Activity
如果以下命令不正确,就要自己百度去了。
1、aapt
将apk拖放到cmd中
2、adb logcat 获取
输入这个命令,然后去启动app。
3.dumpsys
(1)启动要查看的程序;
(2)命令行输入:adb shell dumpsys window w |findstr \/ |findstr name=
(3) 命令输入:adb shell dumpsys window | findstr mCurrentFocus
命令查看当前运行的包名和Activity
五、monkey
Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
查看帮助:
3.1 monkey命令模版
一般在做monkey时,使用以下这个命令就可以了,日志尽量详细一点,将来好分析定位问题。
--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就停了。
3.2 seed值,标记
如果seed值相同,则两次执行monkey的事件顺序是相同的。
应用场景:
我们在执行monkey时,给一个seed标记。等我们下次需要复现上一次的执行过程时,我们执行monkey命令,带上这个标记,则这一次执行的事件顺序与上一次事件顺序是一致的,就可以复现上一次的步骤。
注意:
两次执行命令,使用相同的seed值,执行过程并不是严格意义上一致的,可能会有不一致的地方,不过这个不重要,我们可以忽略这个。
示例:
第一次执行,1000次。seed值为666
第二次执行,为了与上一次执行的逻辑一样,同样适用666为seed值。
seed值,如果执行的命令里不指定,在monkey执行时,会生成一个seed值。
3.3 设置monkey事件的百分比
monkey的事件都是随机事件,我们这里可以设置每个事件类型发生的百分比。
例如:
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
3.4 monkey注意事项:
1、. 开启安全设置下的未知来源
2. 手机连接电源充电
3. 若有有关于音频的模块,请插入耳机避免影响其他同事
六、monkey实战
在执行monkey事件中,手机不会自己熄屏
6. 1 项目实战
先执行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
七. 指定页面进行压测
前言:
目前大部分的Monkey测试的方式大都无法对独立的模块进行稳定性测试,而每个业务线的入口在测试阶段很难通过原生的Monkey测试(随机性较强)来发现自己模块内crash的问题,针对这个问题,这个工具设计开发的初衷就是为了能够缩小测试范围,在测试阶段指定业务模块内发现和暴露更多的稳定性相关的问题。
解决问题:
当App业务变多的时候之后我们需要对App内的业务模块进行针对性稳定性测试。由于原生的Monkey随机性较强,很难 对指定的Activity进行针对性的monkey测试,Demons的出现就为了解决了这个问题。
原理:
原理其实就是有一个后台任务可用定时巡检PC上所连的每个设备当前运行在哪个页面,如果发现设备已经crash或者当前页面不在我们指定的白名单页面,那么该程序会自动处理当前进程的数据并初始化回到主入口。
工具特点:
- 只要手机连上就可以进行监听,无设备数量限制。
- 可以在每次越界之后随机分配回到一个主入口 进行初始化。
- 工具与Monkey执行模块是分离的,这样可以防止相互影响。
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系统中:
注意:在win才有findstr这个命令,mac的命令是grep
验证主入口是否有跳转权限
主入口如果配的有问题会出现以下错误,原因是Activity 没有调用权限
根据以上名称查看当前功能的Activity,将该页面配置至白名单,如下图所示。
3、monkey执行
将单个或多个设备连接电脑
打开cmd命令窗口,进入当前jar包所在目录,执行
等待初始化完成
再启一个cmd命令窗口,执行monkey命令即可。
缺陷:
每个页面都会有个activity,而且,会出现多个页面共有同一个activity的现象,这样的话,就有个缺陷,如果有个A页面下的B页面,他们的共用同一个activity,我只是想在A页面跑monkey,B页面不跑monkey,这个需求是无法通过这个方法达到的,所以,A、B页面都会测试到,原因就是,他这个是针对activity的测试,只要是白名单里的activity,都是可以测试到的,除非A页面、B页面不共用一个activity。这个技术只是比基本的monkey更细化一点,还无法真正达到指定A页面moneky测试
八、monkey bugreport 测试报告分析
当我们使用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记录的。
在我们电脑终端,执行命令。
就可以在当前位置生成一个bugreport.txt文件。
8.1 Android adb bugreport工具分析和使用
Android系统想要成为一个功能完备,生态繁荣的操作系统,那就必须提供完整的应用开发环境。而在应用开发中,app程序的调试分析是日常生产中进程会进行的工作。Android为了方便开发人员分析整个系统平台和某个app在运行一段时间之内的所有信息,专门开发了bugreport工具。这个工具使用起来十分简单,只要在终端执行(linux或者win):
1.Android系统版本>=8.0,直接使用指令adb bugreport,例如:
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图形的形式展现出来,这样出来的效果更加人性化,更加可读。
8.2 battery-historian解析数据
从bugreport导出手机数据,通过battery-historian解析原始数据进行多维度分析功耗异常
具体使用方式,百度一下吧。
8.3 使用jar包解析数据
我们通过jar包,也是解析的adb bugreport 产生的数据。
jar包地址:
GitHub - 18713341733/bugreport
命令:
在当前目录生成了一个压缩文件bugreport.zip
解压bugreport.zip。解压之后,有一个文件名称带有日期的txt文件。
类似于bugreport-TAS-AN00-HUAWEITAS-AN00-2022-08-19-11-24-15.txt
我们使用jar包,就是具体解析的这个文件。
将这个文件重命名为 bugreport.txt,然后将jar包与txt文件放在同一目录下,执行
即可在当前目录生成报告。
打开index.html,就是报告
九、Monkey日志分析
当我们使用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文件的分析
7.1 ANR 应用程序无响应对话框
ANR(Application Not Response)是指在Android上,应用程序响应不够灵敏时,系统会向用户显示的一个对话框。 用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。
7.1.1 ANR分析:
教你如何 分析 Android ANR 问题 - 走看看
1、查看monkey的log
2、/data/anr/traces.txt
3、查看logcat日志ANR
在monkey log文件中,搜索ANR,如下图
1、anr发生的页面
2、每个进程的CPU 利用率
7.1.2 traces.txt 文件
adb shell
进入linux 系统
在/data/anr/目录下,有个traces.txt文件
取出这个文件,在电脑终端执行命令
分析这个文件。
系统发生ANR,一定会记录在这个文件里。在每次执行稳定性测试时,可以手动清理这个文件。
7.2 Monitor&DDMS
Monitor 集成了DDMS,也可以单独使用DDMS
在终端输入Monitor ,启动Monitor
看log cat日志
集成了DDMS
1、1点击,出现logcat
2、双击logcat放大
7.3 Exception & Crash
异常Exception 通常伴随着Crash。
1、查看monkey的log日志
2、查看logcat日志Crash
7.4 monkey日志分析步骤
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 执行命令:
<scriptfile>MonkeyScript 脚本
<event-count> 执行次数
10.1 MonkeyScript 常用命令
一、DispatchTrackball 轨迹球事件
注意:按一个键需要两个轨迹球事件 。
轨迹球常用命令:
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 输入字符串命令
四、LaunchActivity 启动应用
五、UserWait 等待事件
单位毫秒
六、DispatchPress 按下键值
如按下回车键:
DispatchPress 与 DispatchPointer 区别:
DispatchPointer 点击的是屏幕(坐标)
DispatchPress 点击的是键盘,如点击回车键、点击a键、f键等。
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 |
10.2 MonkeyScript 脚本编写
手机设置,打开开发者模式,打开 指针位置,这样我们就可以看到点击的坐标。
下面以测试登录功能为例:
模板:
注意:
顶部4行命令,是MonkeyScript 固定的脚本头,需要写在脚本的最前面。
在脚本中,脚本头是一直不变动的,为了避免写错,可以直接复制粘贴最保险。
在 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、执行
>C:\monkey.txt为日志输出路径。
例子三:
1、启动APP
2、点击地址栏
3、删除原有地址
4、输入www.baidu.com
5、点击回车
6、点击回车
7、点击搜索框
8、输入字符串test
9、点击回车
10、点击搜索按钮
11、等待搜索结果
10.3 执行脚本
1、adb shell mkdir /sdcard/script 在设备上创建script文件夹用于存放脚本
2、将本地脚本文件push到设备中上面创建的文件夹中。例如adb push /Users/userName/Desktop/testLogin空格/sdcard/script,/Users/userName/Desktop/testLogin就是你脚本在本地的存放路径。
3、执行
>C:\monkey.txt为日志输出路径。
十一、MonkeyRunner介绍
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脚本。
11.1 环境搭建&启动:
安装好Android SDK后,配置MonkeyRunner环境变量(将MonkeyRunner的路径放入Path)。在cmd中输入MonkeyRunner出现如下显示内容说明安装成功,使用Ctrl+D退出。
11.2 MonkeyRunner API介绍&常用命令
MonkeyRunner主要分为三个类:
1、MonkeyRunner:它是一个MonkeyRunner程序提供工具方法的类,这个类提供了用于连接MonkeyRunner到设备或模拟器的方法,同时还提供了用于创建一个MonkeyRunner程序的用户界面以及显示内置帮助的方法。
2、MonkeyDevice:它是一个设备或模拟器的类,这个类提供了安装和卸载程序包、启动一个活动以及发送键盘或触摸事件到应用程序的方法,同时提供也可以用这个类来运行测试包。
3、MonkeyImage:它是一个截图对象的类,这个类提供了截图、将位图转换成各种格式、比较两个MonkeyImage对象以及写图像到文件的方法。
官方文档:http://www.android-doc.com/tools/help/monkeyrunner_concepts.html#
11.2.1 MonkeyRunner类
提供连接真机和模拟器、输入、暂停、警告框等方法
API | 功能 |
alert() | 警告框 |
choice() | 选项列表框 |
help() | API帮助文档 |
input() | 输入 |
sleep() | 暂停 |
waitFor Connection() | 等待设备连接 |
常用方法:
1、alert 警告框
message: 弹出对话框内容
title:对话框的标题栏显示内容,默认值为“Alert”
okTitle: 对话框的按钮,默认值为“OK"
2、waitForConnection
等待设备连接,多个设备,需要指明哪个设备。
timeout: 等待超时时间,默认值为永久等待
deviceId:通过设备ID识别手机,如果只有一台手机,不需要输入。
11.2.2 MonkeyDevice类
提供安装和卸载程序包、开启activity、发送按键和点击事件、运行测试包等
API | 功能 |
broadcastIntent() | 发送广播 |
drag() | 拖动 |
getProperty() | 获取当前设备属性 |
getSystemProperty() | 获取当前设备属性 |
installPackage() | 安装应用 |
instrument | 执行测试用例 |
press() | 按键 |
reboot() | 重启 |
removePackage() | 删除指定Package |
startActivity() | 启动应用 |
touch() | 点击 |
常用方法:
touch参数说明:
- integer x:x坐标值
- integer y:y坐标值
- integer type:key event类型(如: DOWN:按下事件 UP:弹起事件 DOWN_AND_UP:按下弹起事件 )
drag参数说明:
- tuple start:拖拽起始位置,为tuple类型的(x,y)坐标点。
- tuple end,拖拽终点位置,为tuple类型的(x,y)坐标点。
- float duration,拖拽手势持续时间,默认为1.0s。
- integer steps,插值点的步数,默认值为10。
11.2.3 MonkeyImage类
用来保存各种格式的测试截图,并可以进行图像对比
API | 功能 |
convertToBytes() | 转换图像格式 |
getRawPixel() | 获取当前坐标像素元组 |
getRawPixellnt() | 获取当前坐标像素值 |
sameAs() | 图像对比 |
writeToFile() | 保存图像文件到指定的文件路径 |
getSubImage() | 截取子图像 |
takeSnapshot() | 屏幕截图 |
常用方法:
- takeSnapshot():屏幕截图
- writeToFile():保存图像文件到指定的文件路径
编写Python测试代码:
十二、MonkeyRunner脚本实战
作者:Cyzhouke
链接:https://www.jianshu.com/p/30532d06306b
12.1、测试场景
使用MonkeyRunner连接设备,进行自动安装并启动APP,完成登录功能,并截图保存到指定目录下
12.2、思路分析
步骤:
1、连接设备
2、安装App
3、启动App
4、点击用户名,密码输入框,完成输入
5、点击登录
6、截图
12.3、代码(考研帮app)
下载考研帮apk
十三、python GUI编程(tkinter)基于adb 编写安卓助手
工具exe资源下载地址:
源码地址:
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详见如下附图一: