流量

常用方法

方法一:Android系统自带统计功能(总体流量数值)

Proc/uid_stat/{UID}/tcp_snd和tcp_rcv

  • UID是每个app安装时候分配的唯一编号用于识别该app.
  • tcp_snd:表示发送数据累计大小,单位是字节
  • tcp_rcv:表示接收到的数据累计大小。

具体步骤:

(1)通过包名获取app的PID;

(2)再访问/proc/{PID}/status文件查找app对应的UID;

(3)通过UID号加上100000号查看接收和发送的流量文件

方法二:Wireshark+tcpdump

./tcpdump -s 0 -w ./t1.pcap -v

  • -s 0:默认抓包抓取长度是68字节,加上-s 0可以抓到完整的数据包。
  • -w xxx:抓取到的包存放路径。
  • -v:抓包过程中显示抓包的数量

方法三:GT(随身调)工具(直接调用android的api):

TrafficStats类是Android提供的一个流畅统计类,可以统计手机开机累计到现在使用的流量,也可以统计某个或者多个进程或者应用所使用流量,包括Wi-Fi和移动数据GPRS。

GT使用TrafficStats.getUidTxBytes(uid)来获取流量数据(该方法号称是获取到指定 uid 发送流量的总和,但实测情况是只有 tcp 层的流量)。

GT(随身调)是APP的随身调试平台,是直接运行在手机上的IDTE。可以使用GT对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等)、开发日志查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。

GT官网

流量测试的分析

  • 域名的流量消耗:抓包后,利用现有工具统计不同域名下的流量消耗。便于发现某个服务器是否存在流量消耗过大。
  • 协议的流量消耗:便于发现某个协议是否存在流量消耗过大或者协议拉取较频繁的现象。

电量

Battery Historian:Google提供的电量分析工具,Android 5.0以上支持

adb shell dumpsys battery //读取电量和温度
adb shell dumpsys batterystats --reset //重置电池统计信息
adb shell dumpsys batterystats > batterystats.txt // 获取电池统计信息
python historian.py batterystats.txt > batterystats.html //生成报告

参考

CPU

/proc 文件系统是一个伪文件系统,只存在内存中而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。

从proc文件可以获取:系统、进程、线程的CPU时间片使用情况,所以两次采集时间片的数据就可以获取进程CPU占用率。

CPU占用率=(进程T2-进程T1)/(系统T2-系统T1)
进程总CPU时间 总CPU时间 totalCPUTime=user+nice+system+idle+iowait+irq+softird
processCPUTime=utime+stime+cutime+cstime 线程总CPU时间 threadCPUTime=utime+stime+cutime+cstime
  • utime:该任务在用于态运行的时间,单位为jiffies
  • stime:该任务在核心态运行的时间,单位为jiffies
  • cutime:累计的该任务所有waited-for进程曾经在用户态运行的时间,单位为jiffies
  • cstime:累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies

获取系统CPU时间片:读取proc/stat

获取进程CPU时间片:proc/pid/stat

线程时间片:/proc/pid/task/tid/stat

内存

  • 系统内存:

    • 系统内存:/proc/meminfo
    • 系统空闲内存:ActivityManager
    • 系统已有内存:总内存-空闲内存
  • 进程内存:
    • 进程内存上限、总内存都可以直接使用 am.getProcessMemoryInfo(PID)获取
    • 也可以直接使用top命令

流畅度检测

流畅度:Android系统每隔16.7ms发出垂直同步信号(VSync信号)(1000ms/60=16.67ms)触发对UI进行渲染。流畅画面需要60帧/s,为了能够实现60帧/s,意味着计算渲染的大多数操作必须在16.7ms完成。

当绘帧间隔超过16.7ms,垂直同步机制会让显示器硬件等待GPU完成栅格化渲染操作,我们就可以说此时掉帧了,也会造成用户直接感官的卡顿。

1秒内vSync信号的次数定义为流畅值,即SM。

卡顿分类

  • 低流畅值区间:连续小卡顿造成的丢帧,即平均流畅值低于40帧/s的区间。
  • 单次大卡顿:单次大卡顿造成的丢帧,即两次绘帧间隔大于70ms,相当于丢了4帧以上的区间。

Android的帧绘制流程是:CPU主线程图像处理->GPU进行光栅化->显示帧。APP产生掉帧的情况大多是由“CPU主线程图像处理”这一步超负载引起。

页面启动时长

页面启动时长:

  • Activity启动时长:唤醒Activity到Activity在前台进行第一次绘制的时间,绘帧检测
  • Fragment启动时长:唤醒Fragment到Fragment执行onResume的完成时间。
  • 冷启动:页面从startActivity开始
  • 热启动:页面从onStart或者onResume开始

APP性能测试指标和测试方法的更多相关文章

  1. [原创]App性能测试指标篇

    [原创]App性能测试指标篇 目前由于苹果,三星等大厂对智能手机的研发及投入,使的智能手机发展非常迅速,每个人手中都有一些离不开生活的App,如:微信,微博,百度或是各游戏App等,但是到底App性能 ...

  2. app性能测试指标

    性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样.中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试.应用在网络上性能的测试和应用在服务器端性能的测试.通常情况下,三方 ...

  3. 常见的APP性能测试指标

    性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样.中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试.应用在网络上性能的测试和应用在服务器端性能的测试.通常情况下,三方 ...

  4. app性能测试,你需要关注哪些指标?

    app性能测试,你需要关注哪些指标? 一.Android客户端性能测试常见指标: 1.内存 2.CPU 3.流量 4.电量 5.启动速度 6.滑动速度.界面切换速度 7.与服务器交互的网络速度 二.预 ...

  5. Jmeter之app性能测试(ios,android)

    测试小菜鸟alter今天一大早又学习了一点东西关于jmeter-app性能测试,现在记录一下.提到性能测试,那我就简单总结一下.(想跳过的,直接将页面下移到下一个红色字体处) 性能测试的相关知识介绍 ...

  6. Android app性能测试小结(7个性能指标)

    1.性能测试的几个指标:       2.性能测试环境准备: 3.启动时间 3.1,监控值的获取方法 启动分为冷启动和热启动,冷启动:应用程序首次启动,进程首次创建并加载资源的过程:热启动:应用程序启 ...

  7. APP性能测试中的几个重要概念

    转载一篇文章,关于app性能测试的几个概念,对于想要接触app测试的朋友或许有些帮助. 我们在使用各种 App 的时候基本会关注到:这款软件挺耗流量的?运行起来设备掉电有点快嘛?切换页面的时候还会有卡 ...

  8. iOS App稳定性指标及监测

    一个App的稳定性,主要决定于整体的系统架构设计,同时也不可忽略编程的细节,正所谓"千里之堤,溃于蚁穴",一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃.尤其因为 ...

  9. Android APP性能测试笔记(一)

    Android APP性能测试笔记(一) (1)工具使用   Android Studio  GT, root的真机 (2)记录apk大小(对比竞品)   使用Android Studio导入需要测试 ...

随机推荐

  1. iOS事件分发

    前段时间项目有一个需求,要在点击闪屏的时候做一些处理,刚接到这个需求觉得很简单啊,在原有的view上加个button或者手势识别啥的,后面实现的时候发现还是有点坑.无论我在闪屏上面加button还是手 ...

  2. 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)

    不多说,直接上干货! 环境说明: 本地没有安装Oracle服务端,oracle服务端64位,是远程连接,因此本地配置PLSQL Developer64位. Oracle database使用在本机部署 ...

  3. php -- 文件上传下载

    ----- 026-upload.php ----- <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  4. Python学习--12 异常处理、调试

    异常捕获 语法格式: try: pass except xxx as e: pass except xxx as e: pass ... else: pass finally: pass except ...

  5. xshell 登陆堡垒机实现自动跳转

    1, 正常使用用户密码登录堡垒机并保存登陆配置 2, 配置登陆脚本 添加第一个: expect 为空send :ssh root@ip 添加第二个: expect root@ip's password ...

  6. Mysql在linux下载、安装详情,附带mysql安装包路径

    对mysql在linux的安装网上很多,但是都比较坑人,mysql的下载.到用什么包安装,安装过程没有具体解析 我最痛苦的其实是找安装包,建议找.tar.gz安装包比较好(下面我为同胞们找到了mysq ...

  7. Android so 文件进阶<三> so文件的简单加密

    0x00  前言 之前的两篇文章从链接视图和执行视图分析了elf文件的大致结构,这篇文章主要内容是对于so文件进行简单的加密工作,针对Ida等静态分析工具的分析,一旦开始动态调试就应该很容易就可以du ...

  8. C++ 各种继承

    博客园首页博问闪存新随笔联系订阅 管理随笔- 文章- 评论- C++继承:公有,私有,保护 公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. ...

  9. SOA和微服务架构的区别?

    转自知乎:https://www.zhihu.com/question/37808426/answer/93335393 SOA和微服务架构的区别? 微服务架构强调的第一个重点就是业务系统需要彻底的组 ...

  10. JDK并发包中ExecutorCompletionService使用

    相信大家都知道,jdk中ExecutorService是并发编程时使用很频繁的接口,并且使用很方便,那么想在有这么一个场景: 一批任务使用线程池处理,并且需要获得结果,但是不关心任务执行结束后输出结果 ...