常用adb命令及monkey命令详解

基于这篇文章,给大家再深入一下。

传送门:https://jianjiexuan.com/tools/android-sdk/293.html

我将有一段时间进行人生的思考,所以,这边插播一下我的微信,文章可能暂时停停。

一、常用adb命令

1、adb devices:查看已连接的设备

2、adb version:查看adb的版本序列号

3、adb -s <设备名字>:指定某设备做什么(设备名字用1的方法可以查看)

4、adb install <安装包.apk>:安装应用(写清楚apk的完整路径)

adb -s <设备名字> install <安装包.apk>:指定设备安装应用

5、adb shell:通过远程shell命令来控制模拟器/设备

6、exit:退出shell远程连接,回到原路径。(Ctrl+d,退出shell,回到默认路径)

7、adb pull <设备端路径> <pc端路径>:将指定的文件从设备/模拟器上拷贝到pc端(后面的pc端路径可以不指定,默认存储在当前路径下)。例:

  adb pull /sdcard/log.txt c:/monkey

8、adb push <pc端路径> <设备端路径>:将指定的文件从pc端拷贝到设备/模拟器上

9、adb shell pm list packages:列出电脑端所有apk的包名

10、adb shell pm path packages:获取包名对应的apk路径

11、adb shell ps :查看已链接设备上所有进程

12、adb logcat:查看pc端的日志输出。

adb shell界面只需输入logcat,查看设备端日志输出(退出Ctrl+c)

13、adb reboot:重启设备,强制停止monkey时可以使用此命令,简单粗暴。

二、Monkey命令扩展

1、最简单的monkey执行语句:

(adb shell)monkey –p com.jianjiexuan.na –v 500  (对com.jianjiexuan.na 这个程序包单独进行一次500次的monkey测试)

名词解释

-p:用于约束限制,用此参数指定一个或多个包。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。

指定多个包:monkey -p <packagename1> –p <packagename2>  -p <packagename3> -v 500

-v:用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

  • 日志级别 Level 0

monkey –p com.jianjiexuan.na –v 500

说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息

  • 日志级别 Level 1

monkey –p com.jianjiexuan.na –v -v 500

说明:提供较为详细的日志,包括每个发送到Activity的事件信息

  • 日志级别 Level 2

monkey –p com.jianjiexuan.na –v -v -v 500

说明:最详细的日志,包括了测试中选中/未选中的Activity信息

2、延时及固定序列

(adb shell)monkey -s 100 -p com.jianjiexuan.na – -throttle 1000 -v 500 (每次执行一次有效的事件后休眠1000毫秒

(adb shell)monkey -p com.jianjiexuan.na – -throttle 1000 – -randomize-throttle -v 500 (每次执行一次有效事件后随机延时0-200毫秒

名词解释

-s:用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。出现问题下次可以重复同样的系列进行排错

–throttle固定延时,用于指定用户操作(即事件)间的时延,单位是毫秒;

–randomize-throttle随机延时,用于指定用户操作(即事件)间的时延,单位是毫秒。

3、保存monkey运行结果

1)保存在PC中

adb shell monkey –p com.jianjiexuan.na –v 500 > d:\monkey\log.txt   

2)保存在手机中

手机端进入shell模式:adb shell

 monkey –p com.jianjiexuan.na –v 500 > /mnt/sdcard/monkey/log.txt

4、monkey事件百分比的调整

(adb shell)monkey -p com.jianjiexuan.na -v – -pct-anyevent 100 500

指定多个类型事件的百分比:

monkey -p com.jianjiexuan.na -v –pct-anyevent 50 –pct-appswitch 20 500

名词解释

–pct-****:设置某个事件的百分比。后面接数字(0-100),100即100%的概率执行该事件

monkeygai01

注意:各事件类型的百分比总数不能超过100%。如果不进行设置则显示默认百分比。

5、正在运行的monkey如何终止

如在命令窗口端直接打印结果,想要停止monkey的运行,除去重启设备的粗暴方式停止monkey的运行,也可以这样:再打开一个cmd命令窗口

查看monkey的进程:adb shell ps | find “monkey”

monkeygai02kill掉该进程就可以

adb shell kill + 进程编号 ,即adb shell kill 5182

关于其他的细化的,后续会继续更新中。。。

Android App压力测试-Monkey(真机)

昨天一个朋友说自己工作了好几年,但是依然只是会一些功能测试(手工),问有没有什么工具。其实工具永远都是辅助,首先要确定你要往哪个方向发展,然后由这个方向自会引申出很多工具,你再去专研工具,边专研边对这块方向深入,到时候,你就是前辈了,一通百通。

好了,下面来点干货,前两年在新浪博客里写过Monkey在模拟器上如何执行,今天从头到尾讲下在真机上如何运行。我的目的就是,你看了我的东西,是真的能够学会我所说的,不仅仅是知识的硬塞入。

首先,Monkey主要用于移动端的压力测试,在adb shell中,生成用户或系统的伪随机事件。做压力测试的目的就是提高产品的稳定性及留存率。

 什么时候用Monkey测试比较合适?

1)测试节点最好安排在功能系统测试通过,路径上没有问题的时候

2)测试时间最好安排在下班后的夜间进行,不占用上班时间,节约时间成本

Monkey测试涉及的核心:

1)ADB:Android Debug Bridge,安卓调试桥

2)MonkeyScript:一组可被Monkey识别的命令集合,可以完成重复固定的操作
当当当,下面进入正题

一、搭建Monkey的环境

1、下载安装sdk环境,不需要下载开发的api部分。

下载传送门:http://pan.baidu.com/s/1o80il2U

下载之后解压。

2、配置环境变量

在path变量值里加入Android-sdk中platform-tools和tools的目录路径,记得分号隔开。

3、验证是否配置成功

打开cmd命令行窗口,输入adb,出现下面的内容即为环境配置成功

monkey01

二、连接设备

1、首先通过USB线连上手机和电脑,确保手机的调试模式打开

2、cmd命令行窗口输入,adb devices,查看已连接的设备,如下图所示

注:可能是驱动的原因,有时候需要先打开手机助手(豌豆荚),连上手机。与adb.exe冲突,结束adb.exe进程。

monkey02其中,98AFBNM24J7R为已连接设备的名字。

3、指定设备安装测试包

adb -s 98AFBNM24J7R install ***.apk(写清楚apk的完整路径)

如图所示

monkey03

:有的人会出现以下问题:

monkey04这个是为什么呢,看看你连接的手机,因为安装的时候手机要允许。

三、执行Monkey

1、查看该包的packagename

aapt dump badging ***.apk(写清楚apk的完整路径),如图所示

 http://blog.jianjiexuan.com/tools/android-sdk/82.html

monkey05

2、最简单的monkey执行语句

adb -s 98AFBNM24J7R shell monkey -p <packagename>(即上一步查询的东西) -v 1000

这时的执行结果在命令行端显示

monkey06

具体想扩展的直接百度就可以,我这里只给大家一个准确简单的完整流程。

3、存储结果在手机端

进入该设备的shell界面

adb -s 98AFBNM24J7R shell

monkey08

执行:

 monkey -p <packagename>(即上一步查询的东西) -v 1000 > /mnt/sdcard/monkey.txt

加强综合版:有了这个基本可以说自己会monkey了(如果你看到这,可以加我微信了:jianjiexuan520

monkey -p ***** –ignore-crashes –ignore-timeouts –ignore-security-exceptions –monitor-native-crashes –pct-touch 50 –pct-motion 10 –pct-nav 10 –pct-majornav 10 –pct-appswitch 10 –pct-anyevent 10 –pct-syskeys 0 -v -v -v -s 123 –throttle 300 360000 2>/sdcard/yymonkey.log &

fuck,明明打的两个杠杠,显示出来的都是一个,为了避免误导大家,我顺便截个图,你们自己记得修改

命令说明:(具体详细解释可以看另一篇文章)

-p 包名:运行该程序

–ignore-crashes:当应用程序崩溃或发生任何失控异常时,Monkey将继续向系统发送事件,直到计数完成。

–ignore-timeouts :当应用程序发生任何超时错误,Monkey将继续向系统发送事件,直到计数完成。

–ignore-security-exceptions:当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将继续向系统发送事件,直到计数完成。

–monitor-native-crashes:监视并报告Android系统中本地代码的崩溃事件。

–pct-anyevent 10等:设定启动activity的百分比为10%(调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。)

-v -v –v:提供更加详细的信息。一个V为较少信息;二个为较详细信息;三个提示很详细信息。

-s 123:伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。(再次测试需要输入不同的数字,不然结果是一样的)

–throttle 300:在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度,如这里输入300就是为300ms,一般情况下是设置1000,为了发现更多的问题,我们加大了压力

360000:事件数设定为360000,大概可以保证晚上安心下班,明早看结果了。

0>(自定义路径):输入所有LOG记录

1>(自定义路径):输出所有LOG记录

2>(自定义路径) :输出错误LOG记录

:可以拔掉数据线再换个手机了~

四、结果分析

1、调取手机端执行结果到电脑上

adb pull 文件名 (写清楚文件在手机端的完整路径)  要储存在pc端的路径

例:

adb pull /sdcard/monkey.txt d:/  (注意这边的斜杠,反斜杠是不行,Unix使用/作为路径分隔符)

monkey07

2、查看结果

开发人员结合monkey打印的日志和系统打印的日志,结合测试中出现的问题。

  • CRASH:即崩溃,应用程序在使用过程中,非正常退出。(Exception)
  • ANR:Application Not Responding,等待时间过长,程序无响应
  • oom:out of memory 超出内存(一般来说是图片过大或内存泄漏引起的,大部分情况是图片问题)

一个完整的基本流程已经结束了,如果还想深入的小伙伴可以继续研究,可参看其他文档。