專項

前言: 針對目前系列突出問題整理 發現幾類問題總容易被用戶吐槽  時間長了 就造成了重災區  針對重災區的重點分析就顯得尤其重要.css

 

通常有較大版本的更新、版本發佈後用戶反饋問題多、監控的崩潰率等明顯上升等狀況下  須要作專項測試html

一、崩潰類問題(anr 主線程加載>5s  Java crash   native crash)java

二、某場景下易卡頓( 掉幀 cpu問題)python

三、用戶反應使用過程當中相應太慢( 複雜場景冷啓動  交互影響  H5頁面加載)linux

四、發熱(硬件)android

五、兼容性(機型)web

...chrome

針對用戶反應的重災區進行分類後基本上歸爲幾類: shell

一、崩潰(Crash,弱網)
二、卡頓 (掉幀、gc、cpu) 數據庫

三、響應慢(啓動時間、交互響應、H5加載)
四、發熱 (cpu,mem、io、network、gps等硬件使用)

五、掉電快(硬件佔用)
六、兼容性問題 (機型覆蓋、迴歸)

 ...

解決方案:

APM方案:OneApm 聽雲 NewRelic

Crash分析:騰訊Bugly Fabric

LeakCanary:內存泄漏檢測方案

BlockCanary:UI卡頓檢測方案

弱網:測試雲服務 

...

根據反饋問題指定專項測試策略:

一、崩潰 自動遍歷、monkey測試、橫豎屏切換、快速進退

二、卡頓 (掉幀、gc、cpu) 卡頓測試、內存泄漏測試、method profile

三、響應慢(啓動時間、交互響應、H5加載) 冷熱啓動、界面切換、h5性能測試

四、發熱 (cpu,mem、io、network、gps等硬件使用)
五、method profile、gc統計、io統計、流量統計、硬件使用統計、耗電量分析

六、兼容性問題 (機型覆蓋、迴歸) 兼容性測試、自動化測試、自動遍歷、monkey測試

 

1、App性能測試:

Android應用加載流程:

Android是基於Linux的開發的, 打開一個app,首先是liunx先建立一個進程, 併爲其分配內存等資源,

而後進入到Android的虛擬機層,ART  ---applicationOncreat啓動一個主線程加載Activity會話 ActivityOncreat去加載資源(聯網,下載廣告,獲取基礎數據並渲染,第三方apk)

一、Activity 加載時間測試(只能計算出activity建立時間)

501 package='包名'
502 adb shell pm clear $package          #清緩存
503 adb shell am force-stop $package  #中止進程
504 adb shell am start -S -W $package/.view.WelcomeActivityAlias  #啓動app 包名加主activity
507 adb logcat |grep "Displayed "   #獲取Displayed數據

二、經過錄屏+拆幀計算響應時間  https://developer.android.google.cn/studio/command-line/adb#screenrecord

511 adb shell screenrecord /sdcard/demo.mp4    #開始錄屏
515 adb pull /sdcard/demo.mp4          #將錄屏pull到本地後  執行open

ffmpeg -i demo.mp4 -r 20 image-%03d.png  # 使用黑盒工具ffmpeg 將mp4視頻文件拆幀,每50ms一幀; 

ffmpeg -i demo.mp4 -b:v 640k demo.flv  #使用黑盒工具ffmpeg將mp4文件轉換成flv格式,並將碼率設置成640kbps。

ffmpeg -i demo.mp4 -ss 00:00:09.85 -to 00:00:12.70 demo.gif  #將視頻的第09.85到12.70時間段的圖片幀數製做成gif動圖

 

三、手機webview頁面性能測試  檢測工具:chrome://inspect

  • 須要代理
  • 須要chrome 62版本 高版本在必定狀況下會有bug  chrom開發者歷史版本下載
  • 找一個默認開啓webview debug屬性的模擬器,網易mumu就不行,genymotion、as自帶的模擬器是能夠的
  • 真機上須要研發配合打開debug開關
  • sdk版本要對

四、webview,H5頁面性能測試  (W3C 標準)

加載流程: Dns解析,主資源及附加資源加載,cs加載,js加載,頭圖

 查看單個資源的性能:

 

 

 五、接口性能: CDN  DNS解析  HTTP   JSON解析  download

 ···

2、崩潰測試, 能夠深度遍從來補充自動化測試  期間監控系統的logcat  實時上報錯誤信息

adb logcat *:S *:E | grep AndroidRuntime

508 adb logcat |grep -i displayed   #找到哪一個應用啓動在首頁

adb shell ps |grep xxx.xxx.xx 找到進程號

512 adb logcat |grep 9744 |grep *:E  過濾進程中的錯誤信息
520 adb shell monkey -p com.xueqiu.android -v 5000

 

 一、通常在發版前進行測試  使用mongkey  appcrawler  進行遍歷測試

弱網可使用charles代理工具配置或者啓動模擬器時

$(which emulator) -avd [your-avd-image] -netdelay 20000 -netspeed gsm

二、場景測試:

後端接又問題:

  弱網:徹底超時、2G、3G

  接又返回異常:null返回

  接又變動問題:字段類型變動

邏輯問題:

 異步線程問題:打開新頁面再快速返回

邏輯處理不當:橫豎屏切換、先後臺切換
 內存消耗:低內存、循環翻頁、執行可累計內存的操做

三、測試過程當中能夠創建監控體系, 將測試崩潰日誌上報留檔

  日誌捕獲

  外接sdk  如bugly

 

3、卡頓分析

通常是在頁面加載滑動的時候, 頁面的幀數來判斷頁面是否卡頓,通常標準是美妙不低於60fps   

內存問題:(內存抖動、full gc)

cpu (計算耗時 計算佈局  控件大小應該如何渲染  計算完成後交給GPU完成渲染工做)

render (佈局複雜、overdraw在開發者選項中能夠直接配置,配置完成後,頁面會出現4中顏色來表示頁面的渲染複雜度)

一、打開頁面渲染複雜度

 

 

二、查看GPU的渲染分析, 頁面開啓渲染分析, 若是頁面有卡頓, 綠線以上部分表明大於16ms(可是不能表明卡頓,肉眼仍感受流暢)

 

 查看硬件資源佔用:

adb shell dumpsys procstats --hours 3
adb shell dumpsys meminfo package_name|pid [-d]

adb shell dumpsys batterystats --charged package- name

adb shell dumpsys netstats detail
adb shell dumpsys gfxinfo package-name  #繪製出界面幀的狀況  (獲取想要的包名adb shell pm list package |grep zhiyihealth)

 

janky  稱爲一次跳幀,繪製出現延遲.

三、使用頁面卡頓分析工具systrace來分析卡頓頁面

python 2.7.x only  使用pyenv管理python版本切換到2.7  pyenv global 2.7

 

505  find $ANDROID_HOME -name 'systrace.py'

506  cd /Users/wangjianqing/Applications/adt-bundle-mac-x86_64-20131030/sdk/platform-tools/systrace


./systrace.py -l 列舉全部支持的性能數據分類      ./systrace.py -t 10 收集10s左右的系統性能數據      ./systrace.py -t 10 -j 保存一份json數據文件用於編程分析 

#運行systrace
python2.7 systrace.py
#等待開始提示
#操做app
#操做完成
#在systrace窗口內按enter
open trace.html 查看html報告
 

 

3、內存及CPU

CPU MEM的獲取

pids=$(adb shell ps -ef | grep packageName | head -1 | grep -v grep | awk '{print $2}' | xargs | sed 's# #,#g')
#獲取要測試的package的pid 用逗號隔開
#adb shell top -n 1 -d 1 -p ${pids} 去掉-n 1能夠持續刷新
for((i=0;i<20;i++)); do
content=$(adb shell top -d 1 -p $pids -o %CPU,%MEM,NAME -n 1 -b | grep bili)
echo $content #經過linux的top命令每過一秒獲取一次cpu和mem的數據 -d 1 一秒刷新一次 -n 1只展現一次數據, -p 制定一個pid列表 -o輸出的結果顯示標題
cpu=$(echo "$content" | awk '{print $1}') #經過awk取cpu數據
mem=$(echo "$content" | awk '{print $2}')
echo curl -i -XPOST 'http://47.95.238.18:8086/write?db=android' --data-binary "cpu,user=$USER,app=bili value=$cpu" #將cpu和mem寫入到infludb數據庫中
echo curl -i -XPOST 'http://47.95.238.18:8086/write?db=android' --data-binary "mem,user=$USER,app=bili value=$mem"
done

監控平臺

Profile (Android studio tools)

  • CPU profile
  • mem profile
  • systrace GPU profile
相關文章
相關標籤/搜索