嗟叹职业技能
从事软件测试已8年有余,时至今日自认为可以称得上是全栈,对测试、运维、开发等领域亦有所了解,
随着工作经验在不同的行业切换,所接触的测试/开发技术栈,也越来越多,比之以往更是难以琢磨,
好在有一颗自强不息的心,仍然坚持不断学习,再说性能测试领域:app性能及后台服务性能,各有不同。令人唏嘘大好光阴飞逝~~~
Android性能测试之adb命令
优先介绍一些adb基本命令,安装步骤略。
获取当前打开应用的包名和Actively:adb shell dumpsys window | findstr mCurrentFocus获取后台运行应用的包名和Actively:adb shell dumpsys activity |findstr "MainActivity"列出手机应用的所有包名|findstr 过滤关键字""
adb shell pm list packages |findstr "yasibro"
冷启动:adb shell am start -W -n packageName/ActivityName(绝对路径,首个Activity)示例:
adb shell am start -W -n com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.MainActivity结果如下:
C:\Users\qguan>adb shell am start -W -n com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.MainActivity
Starting: Intent { cmp=com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.MainActivity }
Warning: Activity not started, its current task has been brought to the front
Status: ok
Activity: com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.MainActivity
ThisTime: 148
TotalTime: 148
WaitTime: 157
CompleteWaitTime:表示从startActivity到应用第一帧完全显示这段时间. 就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;
ThisTime:表示一连串启动 Activity 的最后一个 Activity 的启动耗时;
TotalTime:表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause的耗时。返回后台运行,同样的命令表示热启动:
adb shell am start -W -n com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.MainActivitytips:冷启动停止APP:adb shell am force-stop packname
热启动停止app:adb shell input keyevent 3测试标准:冷启动时间不超过1.5s, 热启动不超过1s.
完全启动,无网启动,有网启动都可以通过charles抓包来获取启动的时间
通过过滤关键字“Displayed”获得启动应用的时间,单位ms级
adb logcat -s ActivityManager:I | find Displayedtips:日志两个时间之和,表示启动app的时间
每次启动结果如下:
12-24 18:16:49.919 2023 2057 I ActivityManager: Displayed com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.SplashActivity: +899ms
12-24 18:16:51.844 2023 2057 I ActivityManager: Displayed com.chutzpah.yasibro.test/com.chutzpah.yasibro.main.view.MainActivity: +938ms
获取被测app的进程pid:adb shell ps -ef |find "com.chutzpah.yasibro.test"计算进程的流量:adb shell cat /proc/$pid/net/devreceive是指当前进程接收的数据,transmit是指当前进程发出请求的数据,流量是这两者之和Android系统的目录文件/proc/uid_stat/uid/下一般会有两个文件tcp_snd和tcp_rcv。通过adb shell cat/proc/uid_stat/10194/tcp_snd和adb shell cat/proc/uid_stat/10194/tcp_rcv即可分别获得上行流量和下行流量。
mem:adb shell top |find com.chutzpah.ya内存说明
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS命令如下:
adb shell dumpsys meminfo -s <pakagename | pid>process 以进程的PSS从大到小依次排序显示,每行显示一个进程;
OOM adjustment 分别显示每类的进程情况
category 以Dalvik/Native/.art mmap/.dex map等划分的各类进程的总PSS情况
total 总内存、剩余内存、可用内存、其他内存
CPU: adb shell dumpsys cpuinfo |find packageNametips:adb shell top -d 1 | find packagename
-n 指定执行次数
-d 每一秒一次
首先需要将手机切换到非充电状态,使用命令:adb shell dumpsys battery set status 1
(adb shell dumpsys battery set status 2:是将手机切回充电状态)
然后使用命令:adb shell dumpsys battery 获取手机电池信息
耗电量:adb shell dumpsys batterystats |grep packageName
FPS (应用的使用流畅度):adb shell dumpsys gfxinfo <packageName | pid>
- 注意事项,这是性能测试吗?一次当然不是,多次而求平均则就是app专项性能测试
1、windows下执行命令过滤关键字使用find或findstr,进入adb shell终端执行则使用grep
2、所有dumpsys命令获取性能数据,如果adb shell进入终端执行,均要求执行有shell权限,如果PC端进入终端执行,则无此要求