肖sir__app之monkey测试
momkey_使用:
一、adb命令:
1、dos下链接:
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211121174212172-134212714.png)
2、adb devices
原文:List of devices attached(附设)
意思:所附设备清单
3、adb version
Android Debug Bridge version 1.0.31
意思:Android调试桥版本1.0.31
4、adb start-server 启动adb服务
5、adb kill-server 关闭adb服务
7、adb shell pm list package -3:显示所有第三方app包名
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211121181544447-69244543.png)
8、
D:\app\baiduyuedu_3760.apk
![](https://img2022.cnblogs.com/blog/2012893/202202/2012893-20220209234641120-30154887.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211121183825711-1705539127.png)
包名获取方式:
8、adb install D:\app\baiduyuedu_3760.apk
路径:D:\app\baiduyuedu_3760.apk
9、aapt dump badging D:\app\baiduyuedu_3760.apk 获取app包的名称与aActivity
错误:
10、adb shell pm list packages:显示手机中所有的app包的名称
11、adb reboot:重启模拟器
12、adb shell:进入安卓手机目录
13、adb get-serialno(流水号):获取手机序列号
adb devices 获取全部的连接号
adb get-serialno (s力饿) 获取某个设备的连接号,用于确认映射关系
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211121191034822-184791003.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211121191131267-1397644052.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211121191442453-330765006.png)
processor : 0 处理器
vendor_id : GenuineIntel 供应商id
cpu family : 6 cpu家庭
model : 61 模型
model name : Intel(R) Core(TM) i5-5300U CPU @ 2.30GHz
stepping : 4 步进值
cpu MHz : 2294.980 cpu总线
cache size : 3072 KB 高速缓存类型fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 20
wp : yes (功率)
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand lahf_lm abm 3dnowprefetch
bogomips : 4589.96
clflush size : 64
cache_alignment : 64 (高速缓存)
address sizes : 39 bits physical, 48 bits virtual (地址长度)
power management:(电源管理)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211124230643843-344871234.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211124231253457-1790298326.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211124231705835-453724919.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128011516115-499008295.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128011044757-2132419925.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211125000222702-1640409182.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128005542840-1918880198.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211125000555723-1869825929.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211125000905131-1976243244.png)
一、Monkey压力测试的原理
1. adb shell monkey的运行机制
实际上是执行手机中/system/bin/monkey这个脚本;
2. Monkey事件注入机制
Monkey注入系统事件是通过 framework 层的 hidenApi (如:activemanager,inputmanager,windowmanager) 获取系统服务。
Monkey中有11种事件,这些事件在MonkeyEventSource中对事件之间的比例进行设置。Monkey事件根据类型比例生成事件队列,循环查找事件。
a.触摸事件(inputmanager):包括屏幕以及物理键的触摸,滑动,点击事件。
b.Activity事件(activemanager):是指我们调用Android系统组件的事件。
c.Window事件(windowmanager):是指操作Window的事件,例如转屏。
3.Monkey核心类
a. Monkey.java, 程序的入口,根据参数选择合适的MonkeyEventSource,并适时触发MonkeyEvent;
b. MonkeyEventSource.java, MonkeyEvent的工厂,是一个接口;
c. MonkeyEvent.java,各种事件的具体实现。
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128012216121-2094549892.png)
![](https://img2020.cnblogs.com/blog/2012893/202109/2012893-20210924203411970-2134993625.png)
![](https://img2020.cnblogs.com/blog/2012893/202109/2012893-20210924204053153-1749097969.png)
3、下载应用软件:如网易云
4、adb 命令实战:
(1)adb shell monkey help:monkey命令介绍
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
COUNT
=================================================================
报错:
// activityResuming(uni.UNIC7A519E)
Events injected: 100 #事件注入100
报错:
Network stats: elapsed time=2730ms (0ms mobile, 0ms wifi, 2730ms not connected)
网络统计:运行时间=2730ms (0ms移动,0ms wifi, 2730ms未连接)
(3)
(4)
![](https://img2020.cnblogs.com/blog/2012893/202109/2012893-20210924223843492-277745340.png)
出现如下问题:
![](https://img2022.cnblogs.com/blog/2012893/202202/2012893-20220210213032222-2138195902.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128224605187-198906398.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128224844047-525219110.png)
-p用于约束限制一个或多个包(Package,即App)。
指定包,Monkey将只允许系统启动指定的APP。不指定包,Monkey将允许系统启动设备中的所有APP。
指定一个包:adb shell monkey -p package:com.baidu.yuedu 100
说明:com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。
指定多个包:adb shell monkey -p com.dangbeimarket -p com.baidu.yuedu 100
不指定包:adb shell monkey 100
说明:Monkey随机启动APP并发送100个随机事件。
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128223648878-140958808.png)
案例1:adb shell monkey -p com.baidu.yuedu -v 300 300次
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128230129061-1995509722.png)
案例2:adb shell monkey -p com.baidu.yuedu -v 300 > D:\ls\fx\A.txt
![](https://img2022.cnblogs.com/blog/2012893/202202/2012893-20220210214705131-2064806103.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128232439499-950543922.png)
![](https://img2022.cnblogs.com/blog/2012893/202202/2012893-20220210215000020-1082770441.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128232555782-1779897846.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128232900187-1101207573.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211128232835936-499443742.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211129000946538-1249508994.png)
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211129001126427-1084142015.png)
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序
列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随
机的;
![](https://img2020.cnblogs.com/blog/2012893/202111/2012893-20211129002330255-435832864.png)
4) 参数: --throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
* 示例:adb shell monkey -p com.htc.Weather –throttle 3000 100
5) 参数: --ignore-crashes
用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
*示例1:adb shellmonkey -p com.htc.Weather --ignore-crashes 1000
测试过程中即使Weather程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止;
* 示例2:adb shellmonkey -p com.htc.Weather 1000
测试过程中,如果Weather程序崩溃,Monkey将会停止运行。
5.禁用进程
如果想中断运行中的monkey CTRL+C
adb shell ps | grep monkey 返回进程号
adb shell kill [刚才查到的进程号]
6.查看包名
A、手机安装包名查看器'
B、aapt命令: aapt dump badging *.apk
C、源码下AndroidManifest.xml文件查看(需要将apk解压)
D、adb logcat抓取当前Android机运行的app的包名命令行输入adb logcat > e:\bag.txt
手机操控app,ctrl+c停止,去e:\bag.txt这个文件下搜索关键字如Displayed ,一般都能找到!