天天看點

【Android測試】【第一節】性能——CPU

 ◆版權聲明:本文出自胖喵~的部落格,轉載必須注明出處。

    轉載請注明出處:http://www.cnblogs.com/by-dream/p/5065083.html

前言

  本來打算寫完全部的自動化測試之後再寫性能測試的東西,但是想了想,覺得這兩個其實也可以并行的來完成,于是今天打算開個頭,開始性能測試的介紹。

  需要強調的是這裡介紹的都是終端的性能,也就是Android裝置的性能,不是用戶端并發之後伺服器的性能資料,這一點一定要清楚。在這個系列裡面,我會介紹cpu、cpu時間片、電量、記憶體、FPS、流暢度以及流量和抓包,因為我提到這些名額GT都可以采集,是以在我的講解裡,會配合GT一起來講。

GT簡介

  首先介紹一下什麼是GT。

  GT是由騰訊無線研發部專項測試組研發的一款性能測試工具,官方網址是:http://gt.qq.com/index.html ,它的宗旨就是:随身調試,僅需一部手機即可以完成性能資料的采集、日志的檢視、網絡資料包抓取等。Android的版本,除了使用GT的App可以完成性能資料采集外,App本身還支援了廣播調用的方法,更加友善我們調用它來直接取資料了,是以在這裡推薦這個工具給大家使用,可以減少我們很多重複擷取資料的工作量。

CPU采集

  這裡主要介紹GT這個工具的采集方法。

  1、選取你的被測應用:  

  如果是測App的性能的話,那麼第一步當然是選取你的被測應用(這裡我們還是以QQ為例)。

【Android測試】【第一節】性能——CPU
【Android測試】【第一節】性能——CPU
【Android測試】【第一節】性能——CPU

圖1                                                    圖2                                                    圖3

  通過圖3我們可以看到,我們要測的應用QQ,已經被我們選中了,注意QQ圖示的右邊的“com.tencent.moblieqq”就是QQ的 package name(包名),是以以後如果遇到一個App不知道它的包名,我們就可以借助GT來得到它的包名了。

  2、勾選你的測試項:

  選擇完被測App後,界面的下發就是要測試的幾個名額項:

【Android測試】【第一節】性能——CPU

圖4

  前兩項是記憶體名額,後面我們介紹;其他名額中的第一項就是CPU,第二項Jiffes指的是CPU時間片,後面也會介紹。Net指的的流量,後面仍然會介紹,因為本次我們以采集QQ操作過程中CPU為例,是以我們需要勾選 CPU 這項:

  

【Android測試】【第一節】性能——CPU

  3、進入“參數”tab頁面:

  點選下方的 “參數” 按鈕即可進入該頁面。

【Android測試】【第一節】性能——CPU

  位置2的CPU代表的是整個手機目前的CPU使用率占比;位置3代表的是目前應用占整個手機的CPU的百分比(p.s.如果發現你沒有位置3的内容,那麼需要打開你的QQ即可。);當勾選了位置2或者位置3後面的複選框之後,點選位置1的紅色按鈕,采集就開始了。注意:這裡位置3中包含兩條内容,這是因為QQ這個App啟動後一共有兩個程序,一個是背景程序即PCP0,另一個是我們看到的QQ界面,它是一個前台程序,一般我們關注的就是這個應用的前台程序。

  4、開始采集

  點選上面提到的位置1小紅點後,就開始采集了。預設每1秒鐘采集一次,采集的總次數可以在界面上看到:

【Android測試】【第一節】性能——CPU

  點選PCP1,可以進入采集的詳情頁,該頁主要觀察一個平均值和整體曲線的一個走勢:

【Android測試】【第一節】性能——CPU

  5、儲存

  在詳情頁面,我們點選右上角儲存的圖示,即可完成儲存。當然退到上一頁儲存的話,儲存的就是整個采集的資料。

【Android測試】【第一節】性能——CPU

  儲存的的檔案 放在 /sdcard/GT/GW/com.tencent.mobileqq/qq/ 的目錄下:

【Android測試】【第一節】性能——CPU

  導出來放到電腦上,用excel打開後就是這樣的形式:

【Android測試】【第一節】性能——CPU

  這就是GT采集一個App CPU的整個過程。

shell擷取

  由于 Android 系統是基于 linux 核心開發的,是以我們也可以使用shell 中的top指令來擷取目前手機的CPU占用和某個App的占用。

  在 shell 中輸入 top 即可開始監控目前手機的CPU,我們看一下效果:

【Android測試】【第一節】性能——CPU

  由于輸入了top後,會不斷的進行重新整理,是以我們就使用  “ top -n 1 ” 讓其隻顯示一次結果就退出,我們看一下一次top指令後都生成了些什麼:

【Android測試】【第一節】性能——CPU

  第一行分别代表的是:

    User   使用者空間占用CPU的百分比

    System  核心空間占用CPU的百分比

    IOW   等待占用CPU的百分比

    IRQ    中斷占用CPU的百分比

    是以将這四個值加在一起就是目前手機的CPU占用的百分比

  如果我們想知道某個應用所占的百分比,例如qq,那麼可以看com.tencent.map那一行的第三列,就是目前這個應用在這一時刻所占系統的百分比了。 

一個Bug

  學習了上面的兩種方法之後,我們就可以采集App在指定場景下的CPU占用率了,但是我經常發現CPU的百分比是0%的情況,有的時候是因為App确實在背景,可能消耗的特别少,但是有的時候即使在前台它也是0%的情況。當然最終我知道了這是一個bug,我們來看看究竟怎麼回事。下面是我采集的幾組資料:

【Android測試】【第一節】性能——CPU

  圖中一共6組資料,用紅框框住的分别是第一組和第四組,每組資料兩行内容,第一行上面都提到了,不再解釋,下面這一行代表的是各個狀态的cpu時間片(通常也用Jiffes這個概念來說明),我們系統真正在計算CPU的時候就是:CPU的使用率就是用執行使用者态+系統态的Jiffies除以總的Jiffies來表示。而這個總的Jiffies就是我們這裡看到的第二行的和。

  我們可以看到第一組資料的Idle的值非常大,導緻最終值很大,是以在1646855做為分母去計算一個數的時候,得到的值就會特别的小,是以就約等于為0了;第四組資料呢,是由于Idle是一個非常大的負值,是以導緻最終的和變成了負值,那麼最終計算的商肯定是負值,但是由于CPU占用不可能是負值,是以當出現負值的時候,系統也就預設為0了。而Idle的值之是以這麼異常,是因為Android 4.*系統在四核手機上的一個bug,在5.0系統上谷歌修複了這個bug。

  那麼就會有一個問題,如果我們非要在4.*的手機上看CPU的性能呢呢?那麼請看下一篇 cpu時間片。