移动端性能测试工具--MONKEY工具揭秘【乐搏TestPRO】

今天为大家介绍一款移动端性能测试工具—Monkey。(如果需要原脑图,可以扫描文末二维码领取原件

一、Monkey概念

Monkey在英语单词中是“猴子”的意思。“猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的、乱点乱按的。这种测试方式在产品周期中的早期阶段会找到很多很好的bug,为用户节省不少的时间。

Monkey是Android系统自带一个命令行工具,可以运行在模拟器里或者真是设备中运行。Monkey向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。

二、Monkey环境搭建

第一步:环境准备,下载安装包

jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Android sdk :http://tools.android-studio.org/index.php/sdk

第二步:安装,下载好的exe文件,直接双击开始安装,安装过程会检测你是否安装过java jdk。直接默认安装就好。

第三步:双击SDK Manager.exe,如果网络好,可以全选。

第四步:设置android-sdk环境变量,和java是差不多的,只是需要设置的包是android-sdk目录下的tools和platform-tools。

第五步:测试ADB是否安装成功:安卓手机用usb数据线连接到电脑,需要开启开发者模式,允许USB调试电脑打开cmd,输入adb,出现页面,就代表基本配置成功了。

三、Monkey四大类

monkey包括很多选项,大致四大类:

1.基本配置选项,如设置尝试的事件数量。

2.运行约束选项,如设置只对单独的一个包进行测试。

3.事件类型和频率。

4.调试选项

五、命令执行格式

adb shell monkey -p com.best.android.v6app -v 100

-v 指定打印日志的级别:

-v 打印最基本的事件

-v-v 更全面的信息

-v-v-v 最全面的信息

-p 指定测试的APP包名。

-s 指定伪随机数生成器的seed值,如果seed相同,则两次monkey 测试产生的事件序列也相同。

--throttle(毫秒):指定每个事件结束后的间隔时间,降低系统压力;如果不指定系统会尽快的发送事件序列。

--ignore-crashes 忽略App的崩溃。

--ignore-timeouts:忽略超时。

--hprof:指定该项后在事件序列发送前后会立即生成分析报告。

--ignore-security-exceptions:忽略安全异常。

--dbg-no-events:初始化启动的activity,但是不产生任何事件。

--kill-process-after-error:发生错误后直接杀掉进程。

--monitor-native-crashes:跟踪本地方法的崩溃问题。

--wait-dbg:直到连接了调试器才执行monkey测试。

六、随机事件

随机事件分为10种类型,分别为:

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&monkey命令大全

1.显示当前运行的全部模拟器:    adb devices

2.启动ADB:adb start-server

3.停止ADB:adb kill-server

4.安装应用程序:adb install -r [apk文件]

-l #锁定该程序-r #重新安装该程序,保存数据-s #安装在SD卡内,而不是设备内部存储。例:adb install --r D:\mm.apk

5.卸载应用程序:adb uninstall [packagename]

例:adb uninstall com.tencent.mm

-k #不删除程序运行所产生的数据和缓存目录(如软件的数据库文件)

例:adb uninstall -k com.tencent.mm

6. 讲手机设备中的文件copy到本地计算机:     

adb pull 设备目录 本地目录例:adb pull /sdcard/mm.txt D:\(讲内存卡根目录的txt文件copy到D盘根目录)

7.将本地计算机的文件copy到手机设备中   

adb push 本地目录 手机设备目录例:adb push D:\mm.txt /sdcard

8.查看adb命令帮助信息:  adb help

9.截屏例: adb shell screencap -p 截图文件路径

10.查看指定包名应用的数据库储存信息(包括储存的SQL语句)

例:adb shell dumpsys dbinfo[packagename]

11.查看指定的进程或则进程id的内存信息  

adb shell dumpsys meminfo[packagename/pid]可以查看进程当前的内存情况

例:adb shell dumpsys meminfo com.tencent.mm

12.查看指定包名应用的详细信息(相当于AndroidMainfest.xml中内容)

adb shell dumpsys [packagename]例:adb shell dumpsys com.tencent.mm

13.查看当前应用的activity信息adb shell dumpsys activity top查看bug报告: 

adb bugreport 

14.列出手机装的所有apk包名

adb shell pm list packages

系统应用:adb shell pm list packages -s

第三方应用:adb shell pm list packages -3

使用grep过滤 :adb shell pm list packages | grep qq

15.清除应用缓存信息:

adb shell pm clear [packagename]

16.通过adb启动应用程序页面

adb shell am start -n [包名+activity名]

例:adb shell am start -n com.tencent.mm/.ui.SplashAcitvity

强制停止应用有些时候应用卡死了,需要强制停止,则执行以下命令:adb shell am force-stop <packagename>// 如:adb shell am force-stop cn.androidstar.demo

17、记录无线通讯日志:一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录: 

adb shell 

logcat -b radio

18、获取设备的ID和序列号

adb get-product 

adb get-serialno

19、访问数据库SQLite3    

adb shell 

sqlite3#cd system/sd/data //进入系统内指定文件夹 

#ls //列表显示当前文件夹内容 

#rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件 

#rm xxx //删除文件xxx 

#rmdir xxx //删除xxx的文件夹

20.导出设备信息

adb get-serialno > 序列号.txt

adb shell cat /sys/class/net/wlan0/address > MAC地址.txt

adb shell getprop ro.product.model > 设备型号.txt

adb shell getprop ro.build.version.release> 系统版本.txt

adb shell pm list packages -s > 系统应用的所有包名.txt

adb shell pm list packages -3 > 第三方应用包名.txt

adb shell wm size > 屏幕分辨率.txt

adb shell wm density > 屏幕密度.txt

adb shell cat /proc/cpuinfo > CPU信息.txt

adb shell pm list permissions -f > 权限.txt

adb shell pm list users -f > 用户.txt

21.重启:adb reboot

22.备份:adb backup 

23.使用run-as在非root情况获取沙盒数据(前提是开启debuggable模式)

    1.   shell@android:/data $ run-as com.your.package 

    2.   run-as com.your.package 

    3.   shell@android:/data/data/com.your.package $ cd /data/data/com.your.package  

    4.  cd /data/data/com.your.package 

    5.  shell@android:/data/data/com.your.package $ ls  

    6.   ls  

    7.   cache  

    8.  databases 

    9. lib  

    10. shared_prefs  

    11. shell@android:/data/data/com.your.package $ cd databases  

    12. cd databases  

    13. shell@android:/data/data/com.your.package/databases $ ls  

    14. yourpackagename.db  

    15. $ cat preferences.db > /mnt/sdcard/yourpackagename.db    

将你要访问的package目录下的db文件拷贝到sdcard中,这样就可以正常访问了! 对文件进行增删

24: adb shell 

"run-aspackage.name chmod 666 /data/data/package.name/databases/file"

adb pull /data/data/package.name/databases/file .

adb shell "run-aspackage.name chmod 600 /data/data/package.name/databases/file"

adb exec-out run-as package.name cat databases/file > file 

25. adb shellshell 

$ run-as com.example.packageshell $ chmod 666 databases/fileshell $     exit        'run-as'shell $ cp /data/data/package.name/databases/file /sdcard/shell $ run-as com.example.packageshell $ chmod 600 databases/file> adb pull /sdcard/file .

26.更新一些反编译常用命令:

    1.查看当前进程的内存的加载情况:cat /proc/7654/maps 查看当前进程内存的映射情况

    2.查看当前应用使用的端口号信息:cat /proc/[pid]/net/tcp

    3.查看进程的状态信息:cat /proc/[pid]/status可以通过该命令获取到当前进程的包名,PID,PPID等等重要信息(比较实用的命令)

    4.查看一个dex文件的详细信息:dexdump [dex文件路径]

    5.使用aapt命令获取apk的清单文件: aapt dump xmltree [apk包] [需要查看的资源文件xml]

例:aapt  dump xmltree mm.apk AndroidMainfest.xml > demo.txt(讲mm应用中的AndroidMainfest.xml文件导入到新建的demo.txt文本中)

这里可能大家有个误区,aapt命令是与adb命令不是同一个命令,如果要使用和adb一样需要配置环境变量,也可以在SDK的build-tools文件夹内,shift+右键在此处打开命令窗口使用该命令!

今天的先分享到这里,每天持续更新软件测试行业趣闻、动态、技术干货,欢迎添加关注~~

扫码↓领取本文中的涉及的视频资料,以及30G软件测试学习大礼包,共计75节课,内容涵盖功能、性能、自动化、测试框架、安全、接口、面试、测试简历模板。

推荐阅读更多精彩内容