Android性能专项测试

Batterystats & Battery Historian Walkthrough
Battery Historian Charts
Android应用的耗电量统计
SupplicantState
Viewing Battery Use Data

batterystats使用条件

  • 5.0以上系统
  • battery-historian脚本

batterystats的启动

启动统计Battery数据的话,首先要初始化batterystats数据

<code class="hljs livecodeserver has-numbering">adb <span class="hljs-built_in">kill</span>-server

> adb devices

> adb <span class="hljs-built_in">shell</span> dumpsys batterystats <span class="hljs-comment">--reset</span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>

上面的操作执行完毕后,拔掉手机,操作你的App,操作完成后,重新连接手机,执行下面的命令,收集Battery数据:
adb shell dumpsys batterystats > batterystats.txt
得到这些数据后,这个时候使用我们的battery-historian来生成我们可见HTML报告:
python historian.py batterystats.txt > batterystats.html

得到的报告如下:

这里写图片描述

Battery Historian指标

Android性能专项测试之battery-historian试用 一文中已经介绍了一些属性,但是目前又增加很多,下面来看看新加属性的意义:

属性意义
gpsgps是否开启
sync是否跟后台同步
mobile_radio是否开启radio
wake_reason唤醒原因
phone_in_call进行通话

batterystats信息过滤

Battery History

电量相关数据的时间序列:

<code class="hljs lasso has-numbering">Battery History (<span class="hljs-number">0</span><span class="hljs-subst">%</span> used, <span class="hljs-number">152</span> used of <span class="hljs-number">256</span>KB, <span class="hljs-number">5</span> strings using <span class="hljs-number">256</span>):
                    <span class="hljs-number">0</span> (<span class="hljs-number">9</span>) RESET:TIME: <span class="hljs-number">2015</span><span class="hljs-subst">-</span><span class="hljs-number">10</span><span class="hljs-subst">-</span><span class="hljs-number">09</span><span class="hljs-subst">-</span><span class="hljs-number">19</span><span class="hljs-subst">-</span><span class="hljs-number">50</span><span class="hljs-subst">-</span><span class="hljs-number">15</span>
                    <span class="hljs-number">0</span> (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> status<span class="hljs-subst">=</span>charging health<span class="hljs-subst">=</span>good plug<span class="hljs-subst">=</span>usb temp<span class="hljs-subst">=</span><span class="hljs-number">324</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3683</span> <span class="hljs-subst">+</span>running <span class="hljs-subst">+</span>wake_lock <span class="hljs-subst">+</span>wifi_full_lock <span class="hljs-subst">+</span>audio <span class="hljs-subst">+</span>screen <span class="hljs-subst">+</span>plugged data_conn<span class="hljs-subst">=</span><span class="hljs-literal">lte</span> phone_signal_strength<span class="hljs-subst">=</span>moderate brightness<span class="hljs-subst">=</span>bright <span class="hljs-subst">+</span>wifi_running <span class="hljs-subst">+</span>wifi wifi_signal_strength<span class="hljs-subst">=</span><span class="hljs-number">4</span> wifi_suppl<span class="hljs-subst">=</span>completed top<span class="hljs-subst">=</span>u0a34:<span class="hljs-string">"com.google.android.googlequicksearchbox"</span>
                    <span class="hljs-number">0</span> (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> user<span class="hljs-subst">=</span><span class="hljs-number">0</span>:<span class="hljs-string">"0"</span>
                    <span class="hljs-number">0</span> (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> userfg<span class="hljs-subst">=</span><span class="hljs-number">0</span>:<span class="hljs-string">"0"</span>
               <span class="hljs-subst">+</span><span class="hljs-number">189</span>ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3660</span>
               <span class="hljs-subst">+</span><span class="hljs-number">216</span>ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3688</span>
             <span class="hljs-subst">+</span><span class="hljs-number">8</span>s387ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> <span class="hljs-subst">+</span>gps conn<span class="hljs-subst">=</span><span class="hljs-number">3</span>:<span class="hljs-string">"CONNECTED"</span>
             <span class="hljs-subst">+</span><span class="hljs-number">9</span>s387ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> <span class="hljs-attribute">-top</span><span class="hljs-subst">=</span>u0a34:<span class="hljs-string">"com.google.android.googlequicksearchbox"</span>
             <span class="hljs-subst">+</span><span class="hljs-number">9</span>s387ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> <span class="hljs-attribute">-gps</span> <span class="hljs-subst">+</span>top<span class="hljs-subst">=</span>u0a130:<span class="hljs-string">"com.example.android.sunshine.app"</span>
             <span class="hljs-subst">+</span><span class="hljs-number">9</span>s569ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> <span class="hljs-subst">+</span>mobile_radio conn<span class="hljs-subst">=</span><span class="hljs-number">3</span>:<span class="hljs-string">"DISCONNECTED"</span>
            <span class="hljs-subst">+</span><span class="hljs-number">10</span>s217ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3577</span>
            <span class="hljs-subst">+</span><span class="hljs-number">17</span>s294ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3619</span>
            <span class="hljs-subst">+</span><span class="hljs-number">20</span>s216ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3576</span>
            <span class="hljs-subst">+</span><span class="hljs-number">21</span>s530ms (<span class="hljs-number">1</span>) <span class="hljs-number">009</span> <span class="hljs-subst">+</span>wifi_scan
            <span class="hljs-subst">+</span><span class="hljs-number">22</span>s801ms (<span class="hljs-number">1</span>) <span class="hljs-number">009</span> <span class="hljs-attribute">-wifi_scan</span>
            <span class="hljs-subst">+</span><span class="hljs-number">29</span>s842ms (<span class="hljs-number">1</span>) <span class="hljs-number">009</span> <span class="hljs-attribute">-mobile_radio</span>
            <span class="hljs-subst">+</span><span class="hljs-number">30</span>s252ms (<span class="hljs-number">2</span>) <span class="hljs-number">009</span> volt<span class="hljs-subst">=</span><span class="hljs-number">3616</span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li></ul>

Per-PID Stats

每一个进程执行了多长的时间

<code class="hljs livecodeserver has-numbering">Per-PID Stats:
  PID <span class="hljs-number">0</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">396</span>ms
  PID <span class="hljs-number">868</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">1</span>s682ms
  PID <span class="hljs-number">1402</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">539</span>ms
  PID <span class="hljs-number">0</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">6</span>s473ms
  PID <span class="hljs-number">868</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">3</span>ms
  PID <span class="hljs-number">1723</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">166</span>ms
  PID <span class="hljs-number">4841</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">11</span>m1s479ms
  PID <span class="hljs-number">19942</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">271</span>ms
  PID <span class="hljs-number">868</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">42</span>ms
  PID <span class="hljs-number">21564</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">172</span>ms
  PID <span class="hljs-number">15488</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">67</span>ms
  PID <span class="hljs-number">4841</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">6</span>s512ms
  PID <span class="hljs-number">4841</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">6</span>s512ms
  PID <span class="hljs-number">18217</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">126</span>ms
  PID <span class="hljs-number">3876</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">228</span>ms
  PID <span class="hljs-number">868</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">20</span>s440ms
  PID <span class="hljs-number">16547</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">23</span>ms
  PID <span class="hljs-number">22121</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">288</span>ms
  PID <span class="hljs-number">22146</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">59</span>ms
  PID <span class="hljs-number">16424</span> wake <span class="hljs-built_in">time</span>: +<span class="hljs-number">485</span>ms
</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li></ul>

Statistics since last charge

<code class="hljs applescript has-numbering">Statistics <span class="hljs-keyword">since</span> <span class="hljs-keyword">last</span> charge:
  System starts: <span class="hljs-number">0</span>, currently <span class="hljs-function_start"><span class="hljs-keyword">on</span></span> battery: <span class="hljs-constant">false</span>
  Time <span class="hljs-function_start"><span class="hljs-keyword">on</span></span> battery: <span class="hljs-number">0</span>ms (<span class="hljs-number">0.0</span>%) realtime, <span class="hljs-number">0</span>ms (<span class="hljs-number">0.0</span>%) uptime
  Time <span class="hljs-function_start"><span class="hljs-keyword">on</span></span> battery screen off: <span class="hljs-number">0</span>ms (<span class="hljs-number">0.0</span>%) realtime, <span class="hljs-number">0</span>ms (<span class="hljs-number">0.0</span>%) uptime
  Total <span class="hljs-command">run</span> <span class="hljs-property">time</span>: <span class="hljs-number">34</span>s <span class="hljs-number">134</span>ms realtime, <span class="hljs-number">34</span>s <span class="hljs-number">134</span>ms uptime
  Start clock <span class="hljs-property">time</span>: <span class="hljs-number">2015</span>-<span class="hljs-number">10</span>-<span class="hljs-number">09</span>-<span class="hljs-number">19</span>-<span class="hljs-number">50</span>-<span class="hljs-number">15</span>
  Screen <span class="hljs-function_start"><span class="hljs-keyword">on</span></span>: <span class="hljs-number">0</span>ms (<span class="hljs-comment">--%) 0x, Interactive: 0ms (--%)</span>
  Screen brightnesses: (no activity)
  Connectivity changes: <span class="hljs-number">2</span>
  Mobile total received: <span class="hljs-number">0</span>B, sent: <span class="hljs-number">0</span>B (packets received <span class="hljs-number">0</span>, sent <span class="hljs-number">0</span>)
  Phone signal levels: (no activity)
  Signal scanning <span class="hljs-property">time</span>: <span class="hljs-number">0</span>ms
  Radio types: (no activity)
  Mobile radio active <span class="hljs-property">time</span>: <span class="hljs-number">0</span>ms (<span class="hljs-comment">--%) 0x</span>
  Mobile radio active adjusted <span class="hljs-property">time</span>: <span class="hljs-number">0</span>ms (<span class="hljs-comment">--%)</span>
  Wi-Fi total received: <span class="hljs-number">0</span>B, sent: <span class="hljs-number">0</span>B (packets received <span class="hljs-number">0</span>, sent <span class="hljs-number">0</span>)
  Wifi <span class="hljs-function_start"><span class="hljs-keyword">on</span></span>: <span class="hljs-number">0</span>ms (<span class="hljs-comment">--%), Wifi running: 0ms (--%)</span>
  Wifi states: (no activity)
  Wifi supplicant states: (no activity)
  Wifi signal levels: (no activity)
  Bluetooth <span class="hljs-function_start"><span class="hljs-keyword">on</span></span>: <span class="hljs-number">0</span>ms (<span class="hljs-comment">--%)</span>
  Bluetooth states: (no activity)

</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li></ul>

Estimated power use (mAh)

目前只能算比较粗略的估计,不能作为实际消耗数据,期待google更为精准的数据

<code class="hljs rust has-numbering">  Estimated power <span class="hljs-keyword">use</span> (mAh):
    Capacity: <span class="hljs-number">3220</span>, Computed drain: -<span class="hljs-number">2444.11370879</span>, actual drain: <span class="hljs-number">0.00000000</span>
    Idle: <span class="hljs-number">24.7</span>
    Uid u0a46: -<span class="hljs-number">0.01197222</span>
    Uid u0a100: -<span class="hljs-number">0.04600000</span>
    Uid u0a29: -<span class="hljs-number">0.07444444</span>
    Uid u0a118: -<span class="hljs-number">0.14044444</span>
    Uid u0a104: -<span class="hljs-number">0.73288889</span>
    Uid <span class="hljs-number">1000</span>: -<span class="hljs-number">2.12172492</span>
    Uid u0a14: -<span class="hljs-number">3.36807500</span>
    Uid u0a99: -<span class="hljs-number">3.78076692</span>
    Phone calls: -<span class="hljs-number">19.54370833</span>
    Cell standby: -<span class="hljs-number">107.36537361</span>
    Screen: -<span class="hljs-number">2331.64616000</span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li></ul>

Per-app mobile ms per packet

radio唤醒时间除以数据包发送次数,该时间越小代表性能越好,一个高效的App会将所有的流量转化为batches。

All partial wake locks

所有程序中wakelock,关注持续时间和数量

6.0的更新

试用了下6.0的batterystats,现在信息比5.0的更加全面,不但详细列举了不同app的耗电量,还把app中各个子模块的耗电量也输出了:

<code class="hljs fix has-numbering"><span class="hljs-attribute">  Estimated power use (mAh):
    Capacity: 3220, Computed drain: 1163, actual drain: 451-644
    Screen: 361
    Uid u0a99: 189 ( cpu</span>=<span class="hljs-string">13.2 wake=0.000408 radio=102 wifi=6.35 gps=67.8 )
    Uid u0a94: 127 ( cpu=6.99 wake=0.00528 radio=118 wifi=0.451 gps=0.181 sensor=0.836 )
    Uid 0: 111 ( cpu=30.2 wake=5.13 radio=75.0 wifi=0.242 )
    Cell standby: 79.8 ( radio=79.8 )
    Uid u0a95: 63.7 ( cpu=10.9 wake=1.59 radio=50.0 wifi=0.0566 camera=1.15 )
    Uid 1000: 61.1 ( cpu=59.9 wake=0.642 wifi=0.100 sensor=0.525 )
    Uid u0a98: 22.2 ( cpu=0.261 wake=0.00395 radio=21.9 wifi=0.0817 )
    Uid u0a100: 19.0 ( cpu=10.4 wake=0.00502 radio=7.90 wifi=0.624 gps=0.00150 sensor=0.0554 )
    Uid u0a35: 14.3 ( cpu=14.0 wake=0.158 wifi=0.0804 )
    Uid u0a15: 14.1 ( cpu=3.18 wake=1.72 radio=8.71 wifi=0.466 )
    Uid u0a108: 13.9 ( cpu=3.23 radio=10.6 wifi=0.0228 )
    Uid u0a103: 12.2 ( cpu=2.79 wake=0.00260 radio=8.11 wifi=0.811 gps=0.291 sensor=0.187 )
    Uid u0a110: 10.8 ( cpu=0.910 radio=9.92 wifi=0.00682 )
    Uid u0a105: 10.6 ( cpu=5.59 radio=4.95 wifi=0.0642 )
    Idle: 9.40</span></code>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较大,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) d6 d. K9 [7 p 2-11 详解【电量】监控脚本实现和数据分析 O, e4 X& K0 S% h8 v8 V9 ? 2-12 详解【内存】监控值的获取方法 k! e6 e# C" K% z9 k- l 2-13 详解【内存】监控脚本实现和数据分析0 d; e- S% G6 r3 H: g 2-14 详解【FPS&过度渲染】的概念和监控方法 - 分析页面卡慢的方法# G! _2 O9 T* j" K s3 v6 C0 l 2-2 工欲善其事必先利其器-性能测试环境准备 2-3 详解【启动时间】监控值的获取方法0 n( p* l; g C 2-4 详解【启动时间】监控脚本实现% B2 z( C( E& S: n r1 e 2-5 详解【启动时间】数据分析 2-6 【启动时间】时间戳差值监控方法概要介绍 2-7 详解【CPU】监控值的获取方法、脚本实现和数据分析 2-8 详解【流量】监控值的获取方法7 r7 ~/ D5 |+ h9 m9 i6 p) b: Y 2-9 详解【流量】监控脚本实现和数据分析2 [9 {# {$ c9 k/ T, `/ t" \ 3-1 为什么需要使用框架实现自动化测试? 3-10 UnitTest框架之TestCase,TestSuite,TestRunner简介3 A2 {1 F2 @; K 3-11 UnitTest框架之TestSuite,TestRunner自动化测试 3-12 数据驱动框架DDT简介 3-13 数据驱动框架DDT的使用方法 3-14 数据驱动框架DDT实战; 3-2 准备一个被测APP 3-3 工欲善其事必先利其器-自动化测试环境准备 3-4 Android App自动化测试(一) 3-5 Android App自动化测试(二) 3-6 Android App自动化测试(三) 3-7 UnitTest框架之TestFixture简介 3-8 UnitTest框架之TestFixture自动化测试(一) 3-9 UnitTest框架之TestFixture自动化测试(二) 4-1 如何学好Android App API接口测试? 4-10 Fiddler构造HTTP Get请求 4-11 Fiddler构造HTTP Post请求 4-12 Fiddler抓取手机上的网络数据包 4-13 为什么使用PostMan做API接口测试 4-14 工欲善其事必先利其器-PostMan工具准备 4-15 PostMan测试HTTP Get请求 4-16 PostMan测试HTTP Post请求 4-17 数据驱动DDT实现API接口自动化测试简介) 4-18 Python requests测试HTTP中的Get、Post请求 4-19 数据驱动DDT实现API接口自动化测试(一) 4-2 什么是API 4-20 数据驱动DDT实现API接口自动化测试(二); 4-3 抓包神器Fiddler简介 4-4 Fiddler抓包原理解析 4-5 Fiddler修改客户端发出的请求(一) 4-6 Fiddler修改客户端发出的请求(二) 4-7 Fiddler修改服务器端返回的内容 4-8 Fiddler实现会话的过滤、对比及请求的编解码 4-9 Fiddler实现Host的配置 5-1 测试工程师为什么需要掌握持续集成? 5-2 持续集成的概念、流程和意义 5-3 讲解持续集成工具Jenkins3 5-4 Jenkins工具密码的修改 5-5 Jenkins工具的配置说明 5-6 Jenkins工具系统配置和Job配置 5-7 Jenkins工具手动持续集成实战 5-8 Jenkins工具自动化持续集成实战 6-1 Native App自动化测试及Appuim框架介绍 6-2 自动化测试环境、元素识别工具、脚本设计原则-LOVE原则的讲解 6-3 Native App自动化脚本的实现 6-4 Appium自动化测试框架API讲解与案例实践(一) 6-5 Appium自动化测试框架API讲解与案例实践(二) 6-6 Appium自动化测试框架API讲解与案例实践(三) 6-7 Appium自动化测试框架API讲解与案例实践(四) 6-8 Appium自动化测试框架API讲解与案例实践(五) 6-9 Appium自动化测试框架API讲解与案例实践(六) 7-1 Hybrid App自动化测试概要 7-2 Appium基于Sele
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值