0


APP的命令和monkey压力测试

一、命令的使用:

1.dos下链接:adb connect 127.0.0.1:62001
2.所附设备清单:adb devices
device:已识别的设备,表示连接成功
unauthorized:没有授权需要手机授权才能连接
unkown:未识别设备
offline:离线设备
3.版本:adb version
Android Debug Bridge version 1.0.31
意思:Android调试桥版本1.0.31
4.启动adb服务:adb start-server
5.关闭adb服务:adb kill-server
6.检查5037端口号是否被占用:adb nodaemon server
7.显示所有第三方包名:adb shell pm list package -3
8.安装apk应用包:adb install \xxx.apk(apk包路径)
9.卸载apk应用包:adb uninstall app包名
10.获取包名和activity活动名:aapt dump badging apk路径
aapt dump badging D:\测试课程记录\jenkins\搭建环境需要的安装包\baiduyuedu_3760.apk
11.显示手机中所有的APP包名称:adb shell pm list packages
12.重启模拟器:adb reboot
13.进入安卓手机目录:adb shell
14.获取手机序列号:adb get-serialno(流水号)
获取全部的连接号:adb devices
获取某个设备的连接号,用于确认映射关系:adb get-serialno
15.获取手机屏幕分辨率:adb shell wm size
16.查看手机设备号:adb shell getprop ro.product.model
17.获取手机CPU信息:adb shell cat /proc/cpuinfo
processor : 0 处理器
vendor_id : GenuineIntel 供应商id
cpu family : 6 cpu家庭
model : 61 模型
model name : Intel® Core™ 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:(电源管理)
18.获取手机Mac地址:adb shell cat /sys/class/net/wlan0/address
19.查看所有进程的运行日志:adb logcat
20.查看指定APP百度阅读APP日志:adb logcat|find “com.baidu.yuedu”
21.将日志写入到文件中并保存在手机上:adb logcat -f androidpath/filename(手机路径和文件名)
22.将日志写入到文件中并保存在PC上:adb logcat ->windowspath/filename(本地路径和文件名)
23.上传文件到手机端:adb push 本地文件路径 手机路径
24.进入到指定目录:adb -s deviceName shell (中间是设备名称)
25.安装应用到指定的设备目录:adb -s deviceName install apk本地路径(中间是设备名称)
26.删除手机端文件
adb shell
root@shamu:/ # cd /data
cd /data
root@shamu:/data # rm -rf aaa.txt
rm -rf aaa.txt
27.dos命令adb logcat 保存日志出现拒绝访问
报错解释:
当你在使用 adb logcat 命令尝试将日志保存到文件时,如果遇到“拒绝访问”(Access is denied)的错误,这通常意味着你没有足够的权限来写入指定的文件或目录。

解决方法:
确保你在正确的目录下执行命令,并且你有权限在该目录下创建文件。
如果你是在Windows系统上,尝试以管理员身份运行命令提示符(右键点击命令提示符或PowerShell,选择“以管理员身份运行”)。
检查你想要保存日志文件的目录权限,确保你的用户账户有写入权限。
如果你正在尝试写入一个已经打开的文件,确保该文件没有被其他程序占用。
确保你的文件名没有包含任何特殊字符或者保留字,并且文件系统支持该文件名。
如果你在使用网络位置或外部存储设备,确保已经正确地挂载并且具有读写权限。
如果上述方法都不能解决问题,可能需要检查安全软件的限制或者系统策略,或者考虑使用其他方法,如使用文件管理器手动保存日志文件。(检查是否字符填写错误、是否漏写)

二、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,各种事件的具体实现。

三、monkey介绍

1.monkey就是SDK中附带的一个工具。monkey是Android中一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的办法。
该工具用于进行压力测试。开发人员结合monkey打印的日志和系统打印的日志分析测试中的问题。
2.monkey运行原理:命令行:adb shell monkey–>monkey.shell–monkey.jar–android进程–设备上执行测试
在这里插入图片描述

3.下载应用软件
4.adb命令实战:
1)monkey命令介绍:adb shell monkey help
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
在这里插入图片描述
2)对模拟器或真机做100次随机操作:adb shell monkey 100
报错:
// 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)显示第三方的app包的名称:adb shell pm list package -3
4)对指定的APP做100次随机操作:adb shell monkey -p app包名 100
出现问题:网络状态未连接
5.monkey稳定性实战:
对指定的APP每隔1秒做一次操作做100次:
查看所有包名:adb shell pm list package -3
节流:adb shell monkey -p app包名 --throttle 1000 100 (1000ms 100次)
每隔一秒对APP随机做一次操作持续十小时(实际工作时测APP):adb shell monkey -p app包名 --throttle 1000 36000

四、参数-p用法:

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个随机事件
对包进行300次无规律点击测试:adb shell monkey -p com.baidu.yuedu -v 300
adb shell monkey -p com.baidu.yuedu -v 300 >本地文件路径

五、monkey日志分析:

1.monkey日志命令:参数v:日志详细程度
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分三个级别,对应参数:
-v:level0 除启动提示、测试完成和最终结果外提供较少信息
-v -v:level1 提供较为详细的日志,包括每个发送到activity的事件信息
-v -v -v :level2最详细的日志,包括了测试中选中、未选中的activity信息
2.日志分析:
每秒对APP做一次随机操作,执行100次,并输出详细日志:adb shell monkey -p app包名 --throttle 1000 -v-v-v 100
输出日志文件到本地路径adb shell monkey –p app包名 --throttle 1000 –v-v-v 100 >本地路径
3.正常情况:
如果Monkey测试顺利执行完成,在log的最后会打印出当前执行事件的次数和所花费的时间;
monkey:send=1639361375098 count=100
// Monkey finished 代表执行完成
4.异常情况:
查阅Monkey的输出日志:

  1. 程序无响应的问题: 在日志中搜索 “ANR”(anr)
  2. 崩溃问题:在日志中搜索 “Exception”(异常)
  3. 如果有空指针,搜索“NullPointerException”
  4. 如果Monkey执行中断,在log最后也能看到当前执行次数 5.重现异常以及回归验证:

六、s参数详解:

用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的
-s:在命令中加上seed值 确保两次执行的序列号一样
如果第一次稳定性测试时出现了bug,那测试人员就需要重现bug和验证bug
所以需要重复两次操作一样,seed值相同就能确保monkey两次测试所触发的事件
一致
输出日志文件到本地路径:adb shell monkey –p app包名 –s 1001 --throttle 1000 –v-v-v 100>本地.txt
adb shell monkey –p app包名 –s 1001 --throttle 1000 –v-v-v 100>本地1.txt
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;

七、Monkey调试:

在Monkey运行的过程中,我们可以通过结束进程的方式来终止Monkey的运
行,当然在运行的过程中遇到异常、奔溃、等情况Monkey也会停止。为了保证执行
的事件数执行完整我们可以通过调试选项的设置来防止在运行过程中Monkey命令提
前结束
–ignore-crashes 忽略在应用程序出现crash(崩溃)时monkey停止 (crash 克拉许 ,ignore in过诺)
–ignore-timeouts 忽略在应用程序出现ANR(无响应)时monkey停止(anr 嗯no儿 )
–ignore-security-exceptions (security安全 exceptions 异常)
忽略在应用程序出现许可时monkey停止
例如:同时忽略以上三种错误
adb shell monkey -p app包名 -s 1001 --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 100>本地路径1.txt
案例:adb shell monkey -p com.baidu.yuedu -s 1001 --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 100 >D:\f\xyz.txt

Monkey练习:
对百度阅读进行稳定性测试,要求:模拟用户的触摸操作,并执行时间12小时,忽略crashes与anr报错,并输出日志以及稳定性测试报告

八、拓展:

参数: --throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;

  • 示例:adb shell monkey -p com.htc.Weather –throttle 3000 100

参数: --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将会停止运行。

九、禁用进程

如果想中断运行中的monkey CTRL+C
adb shell ps | grep monkey 返回进程号
adb shell kill [刚才查到的进程号]

十、查看包名

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 ,一般都能找到
参考:https://www.cnblogs.com/fighter007/p/8249851.html

标签: 压力测试

本文转载自: https://blog.csdn.net/AgostoDu/article/details/142784284
版权归原作者 AgostoDu 所有, 如有侵权,请联系我们删除。

“APP的命令和monkey压力测试”的评论:

还没有评论