一、Android-SDK 压缩包下载

Android-SDK 压缩包下载地址:www.android-studio.org

下载后可解压到E盘,新建SDK目录 下, adb 工具在E:\SDK\android-sdk-windows\platform-tools 中

使用MONKEY 对APP(真机)进行压力测试步骤_第1张图片

 

 使用MONKEY 对APP(真机)进行压力测试步骤_第2张图片

 

二、配置环境变量 

1、右击 计算机-属性-高级系统设置-环境变量

2、在系统变量下点击新建按钮,输入环境变量名android(自己的习惯命名),将android开发工具的路径导入

使用MONKEY 对APP(真机)进行压力测试步骤_第3张图片

使用MONKEY 对APP(真机)进行压力测试步骤_第4张图片

在加入下个路径的时候要加上英文的分号,注意路径一定要对

3、 在path中添加刚刚添加的环境。选择系统变量中Path,点击编辑按钮,输入刚刚建好的环境,方法和配置java一样,记住要加两个百分号,如图:

使用MONKEY 对APP(真机)进行压力测试步骤_第5张图片

4、测试环境变量

 在cmd中输入adb

使用MONKEY 对APP(真机)进行压力测试步骤_第6张图片

使用MONKEY 对APP(真机)进行压力测试步骤_第7张图片

 

(如果不配置,则需切换到 adb 所在的路径下运行,即 E:\SDK\android-sdk-windows\platform-tools)

 使用MONKEY 对APP(真机)进行压力测试步骤_第8张图片

 

三、连接手机

 1、用手机连接电脑,打开手机-设置-开发者选项-开启 USB 调试

2、查看连接的设备:adb devices

 

如出现以下情况:

* daemon not running. starting it now *
ADB server didn't ACK
* failed to start daemon *

原因:

有另外一个应用占用了ADB SERVER的端口,也许是adb shell本身,结束进程中的adb.exe并重新启动adb试试。。

猜测是某个程序占用了adb端口。于是按此思路查找。

5037为adb默认端口 查看该端口情况如下:

netstat -aon|findstr "5037"

TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 6540

发现6540占用了 5037端口,继续查看6540的task,发现是wandoujia .如下所示

tasklist|findstr "6540"

wandoujia_daemon.exe 6540 Console 1 4,276 K

接下来问题就好解决了,在任务管理器kill掉wandoujia_daemon.exe ,运行android程序,ok .

a.关闭豌豆荚进程

b.adb kill-server

c.adb start-server

 

3、使用ADB 命令安装应用包:adb install -r APK包(-r 表示卸载再安装,APK包需放在和ADB工具同级目录下)

使用MONKEY 对APP(真机)进行压力测试步骤_第9张图片

 使用MONKEY 对APP(真机)进行压力测试步骤_第10张图片

如果安装失败提示没有权限,先获取root权限:adb root

 

 4、卸载应用:adb uninstall 主包名

 

 

如何查看应用的主包名:

(1)没有apk,应用已经安装到手机或虚拟机中

1.logcat

.清除logcat内容,使用命令adb logcat -c

.启动logcat,使用命令adb logcat ActivityManager:I *:s

.启动要查看的程序

 使用MONKEY 对APP(真机)进行压力测试步骤_第11张图片

(2)dumpsys

启动要查看的程序;

命令行输入:adb shell dumpsys window w |findstr \/ |findstr name=

 使用MONKEY 对APP(真机)进行压力测试步骤_第12张图片

补充:使用adb shell dumpsys window | findstr mCurrentFocus  命令查看当前运行的包名和Activity更清晰一些。

 

(3)使用aapt    
aapt是sdk自带的一个工具,在sdk\builds-tools\目录下,

1. 在cmd中,切换至sdk\builds-tools\目录下,即aapt.exe目录下
2.以QQ音乐为例,命令行中切换到aapt.exe目录执行:aapt dump badging C:\Users\Administrator\Desktop\QQyinle_155.apk(apk所在目录位置)
3.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name='com.tencent.qqmusic'
launchable-activity: name='com.tencent.qqmusic.activity.AppStarterActivity'
 
(4)通过查看APK源码下的AndroidManifest.xml 文件
 

 

 四、通过monkey 给手机发送指令

Adb  shell monkey 1000   不指定应用名给手机发送1000个随机事件

Adb shell monkey -p 包名1000   给指定包名发送1000个随机事件

 使用MONKEY 对APP(真机)进行压力测试步骤_第13张图片

 

如出现以下提示,则可能是主包名错误,按照上面详解先查看包名

使用MONKEY 对APP(真机)进行压力测试步骤_第14张图片

 

五、monkey  常见参数含义

 

(01)   adb shell monkey -p 包名 --ignore-crashes 1000     忽略程序崩溃, 测试过程中即使程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止

(02)   adb shell monkey -p 包名 --ignore-timeouts 1000     忽略程序无响应, 测试过程中即使程序无响应,Monkey依然会继续发送事件直到事件数目达到1000为止

 

(03)   -s   伪随机数生成器的 seed 值。如果用相同的 seed 值再次运行 Monkey ,它将生成相同的事件序列。

 

        例:

 

             adb shell monkey -p com.htc.Weather –s 10 100

 

             adb shell monkey -p com.htc.Weather –s 10 100

 

        两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以                这个操作序列伪随机的. 

(04)  --throttle     在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。用于指定用户操作(即事件)间的时延,单位是毫秒。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被产成

             例:   adb  shell monkey -p 包名  --throttle 3000 1000                 总共1000个事件 每个事件之间延时3000毫秒

(05)  --ignore-security-exceptions     通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。

            例:   adb  shell monkey -p 包名 --ignore-security-exceptions 1000

 

 

六、导出log日志到本地

 

在操作app中出现异常情况可导出log日志到本地发给开发分析

Adb logcat ->d:\xxx.txt  导出到D盘根目录,名称为xxx.txt

 

Monkey 测试出现错误后,一般的分析步骤 看Monkey的日志 (注意第一个swith以及异常信息等)

如果用monkey设置了忽略程序崩溃或无响应,在导出的日志中搜索

崩溃问题:在日志中搜索Exception(如果出现空指针, NullPointerException) 肯定是有bug

 

程序无响应的问题: 在日志中搜索 “ANR

 

Monkey 执行中断, 在log最后也能看到当前执行次数