◆版權聲明:本文出自胖喵~的博客,轉載必須注明出處。
轉載請注明出處: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為例)。

圖1 圖2 圖3
通過圖3我們可以看到,我們要測的應用QQ,已經被我們選中了,注意QQ圖標的右邊的“com.tencent.moblieqq”就是QQ的 package name(包名),所以以后如果遇到一個App不知道它的包名,我們就可以借助GT來得到它的包名了。
2、勾選你的測試項:
選擇完被測App后,界面的下發就是要測試的幾個指標項:

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

3、進入“參數”tab頁面:
點擊下方的 “參數” 按鈕即可進入該頁面。

位置2的CPU代表的是整個手機當前的CPU使用率占比;位置3代表的是當前應用占整個手機的CPU的百分比(p.s.如果發現你沒有位置3的內容,那么需要打開你的QQ即可。);當勾選了位置2或者位置3后面的復選框之后,點擊位置1的紅色按鈕,采集就開始了。注意:這里位置3中包含兩條內容,這是因為QQ這個App啟動后一共有兩個進程,一個是后台進程即PCP0,另一個是我們看到的QQ界面,它是一個前台進程,一般我們關注的就是這個應用的前台進程。
4、開始采集
點擊上面提到的位置1小紅點后,就開始采集了。默認每1秒鍾采集一次,采集的總次數可以在界面上看到:

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

5、保存
在詳情頁面,我們點擊右上角保存的圖標,即可完成保存。當然退到上一頁保存的話,保存的就是整個采集的數據。

保存的的文件 放在 /sdcard/GT/GW/com.tencent.mobileqq/qq/ 的目錄下:

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

這就是GT采集一個App CPU的整個過程。
shell獲取
由於 Android 系統是基於 linux 內核開發的,因此我們也可以使用shell 中的top命令來獲取當前手機的CPU占用和某個App的占用。
在 shell 中輸入 top 即可開始監控當前手機的CPU,我們看一下效果:

由於輸入了top后,會不斷的進行刷新,因此我們就使用 “ top -n 1 ” 讓其只顯示一次結果就退出,我們看一下一次top命令后都生成了些什么:

第一行分別代表的是:
System 內核空間占用CPU的百分比
IOW 等待占用CPU的百分比
IRQ 中斷占用CPU的百分比
如果我們想知道某個應用所占的百分比,例如qq,那么可以看com.tencent.map那一行的第三列,就是當前這個應用在這一時刻所占系統的百分比了。
一個Bug
學習了上面的兩種方法之后,我們就可以采集App在指定場景下的CPU占用率了,但是我經常發現CPU的百分比是0%的情況,有的時候是因為App確實在后台,可能消耗的特別少,但是有的時候即使在前台它也是0%的情況。當然最終我知道了這是一個bug,我們來看看究竟怎么回事。下面是我采集的幾組數據:

圖中一共6組數據,用紅框框住的分別是第一組和第四組,每組數據兩行內容,第一行上面都提到了,不再解釋,下面這一行代表的是各個狀態的cpu時間片(通常也用Jiffes這個概念來說明),我們系統真正在計算CPU的時候就是:CPU的利用率就是用執行用戶態+系統態的Jiffies除以總的Jiffies來表示。而這個總的Jiffies就是我們這里看到的第二行的和。
我們可以看到第一組數據的Idle的值非常大,導致最終值很大,因此在1646855做為分母去計算一個數的時候,得到的值就會特別的小,因此就約等於為0了;第四組數據呢,是由於Idle是一個非常大的負值,因此導致最終的和變成了負值,那么最終計算的商肯定是負值,但是由於CPU占用不可能是負值,因此當出現負值的時候,系統也就默認為0了。而Idle的值之所以這么異常,是因為Android 4.*系統在四核手機上的一個bug,在5.0系統上谷歌修復了這個bug。
那么就會有一個問題,如果我們非要在4.*的手機上看CPU的性能呢呢?那么請看下一篇 cpu時間片。
