欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

测试开发进阶(四十七)

程序员文章站 2024-03-22 08:06:10
...

日志分析

使用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