测试开发进阶(四十七)

日志分析

使用adb获取日志

$ adb logcat
$ adb logcat > logcat_1215.log

I/SystemServer(  553): Package Manager
D/SELinuxMMAC(  553): Couldn't find install policy /data/security/mac_permissions.xml
W/PackageManager(  553): Unknown permission com.android.smspush.WAPPUSH_MANAGER_BIND in package com.android.phone

其中 I D W表示日志优先级,类似于 Info Error

  • I:INFO

  • D:DEBUG

  • W:WARING

  • E:ERROR

斜杠后面表示日志的 输出模块

括号中为当前的 进程号

冒号后面内容为 日志主体

拉取 traces.txt文件(追踪信息)

$ adb pull /data/anr/traces.txt /Users/zhongxin/Desktop

关键字

  • fatal exception严重异常

  • ANR IN

性能指标

CPU

很多时候,手机发热发烫。是因为CPU使用率过高,CPU过于繁忙,会导致手机无法响应用户,整体性能降低,用户体验会很差,也容易引起ANR等一些列问题

CPU使用率分为:用户态 系统态 空闲态

  • 用户态:CPU处于用户态执行的时间

  • 系统态:CPU处于系统内核执行的时间

  • 空闲态:CPU处于空闲系统进程执行的时间

CPU使用率=CPU执行非系统空闲进程的时间/CPU总的执行时间

  • HZ

Linux核心每隔固定周期会发出timer interrupt(IRQ 0),HZ是用来定义每一秒有几次timer interrupt

  • Tick

Tick是HZ的倒数,Tick = 1/HZ

即timer interrupt每发生一次中断的时间

  • Jiffies

Linux核心变数,是一个unsigned long类型的变量,它被用来记录系统自开机以来,已经过了多少tick。

每发生一次timer interrupt,Jiffies变数会被+1

CPU使用率=(用户态Jiffies + 系统态Jiffies)/总Jiffies

CPU指标获取

读取proc文件
  • /proc/stat

  • /proc/<pid>/stat

cpu0表示CPU核心

cpu1表示CPU的第二个核心

cpu表示总和

查看模拟器的配置:双核的CPU

查找对于app的cpu使用情况

$ cat /proc/1757/stat

获取当前进程的Jiffies

$ cat /proc/1757/stat | awk -F " " '{print $14,$15}'
第三方工具GT/soloPi

https://gt.qq.com/download.html

将日志保存到文件中

拉取至本地

$ adb pull /sdcard/GT/GW/com.sankuai.meituan/5.5.4/20191215/Pcp0_com.sankuai.meituan_20191215100605.csv /Users/zhongxin/Desktop

soloPi无法安装到模拟器,暂不演示

启动时间

2-5-8原则

App启动方式

  • 冷启动

后台没有进程,系统会重新创建一个新的进程分配给该应用

  • 热启动

后台已有该进程,会从已有进程来启动应用


查找包名

android 7.0以下

$ adb shell dumpsys activity | find "mFocusedActivity"

android 8.0以上

$ adb shell dumpsys activity | find "mResumedActivity"

  1. 查看启动时间

$ adb shell am start -W -n com.lemon.lemonban/com.lemon.lemonban.activity.WelcomeActivity

程序员角度:获取打开应用到第一帧出现的时间

  1. 使用soloPi来进行屏幕录制

  2. 录屏数帧

人工录制后数帧数

$ adb shell screenrecord --bugreport /sdcard/launch.mp4

流量

手机上网所产生的流量数据。

读取proc文件

$ cat /proc/net/xt_qtaguid/stats

  • iface 网络性质 wlan-wifi流量 lo本地流量 rmnet0-3g/2g流量

  • uidtagint 应用UID

  • cnt_set 应用前后台标识位 1-前台 0-后台

  • rx_bytes 接收数据

  • tx_bytes 传输数据

查看具体app的流量

使用 ps找到对于应用的 uid:u0_a35 = 10000+35

lo:网络类型

10035:应用UID

0:后台

132324:接收的流量数据消耗

2321:发送的流量数据消耗

电量

电量影响因素

  • cpu

  • wakelock(保持唤醒锁)

  • 无线数据(2G/3G/4G)

  • wiif

  • 蓝牙

  • 传感器

  • 相机

  • 闪光灯

  • GPS

power_profile.xml文件:决定电量测试是否准备的标准文件

  1. 手机中的每个组件,如CPU,LCD,GPS,WIFI,BT等,运行时的能耗标准都保存在power_profile.xml中

  2. 由于android手机厂商的差异,每个硬件模块耗电信息不同,所以每个厂商都会对power_profile.xml进行定制

  3. android耗电量通过代码估算,没有硬件参与汇报,准确度取决于厂商ROM所提供的powerprofile.xml文件,不同厂商的powerprofile.xml准确度及源码有差异,因此不同手机,不同版本的数据可能存在较大差异

  4. 系统源码PowerProfile读取power_profile.xml,并提供API访问部件电流数值

  5. 怎么获取power_profile.xml:反编译framework-res.apk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章