1. 程式人生 > >《移動App測試實戰》讀書筆記

《移動App測試實戰》讀書筆記

總的來講,這本書基本涵蓋了移動App測試的方方面面,並結合各個專題做了簡單講解,對於擴充套件無線端測試的知識面有極大的好處,缺點是知識點點到為止,畢竟全書300多頁的篇幅也不可能對知識點進行專題講解。書中作者提到的一些觀點與我之前思考的也是一致的,為了提升自己,一方面要建立清晰的測試解決方案體系,形成自己的測試思想和方法,另一方面要持續鑽研測試框架與語言,悟出自己的測試之“道”。

下面羅列一下我學到的知識點:

第一章:功能測試概述

本章內容比較熟悉,略過,簡單提一下非功能測試要點。
APP非功能測試:push(1正常啟動情況,接收Push ;2後臺執行情況,接收Push ;3後臺殺死情況,通過必要渠道啟用後,接收push)、閃屏(是否支援跳轉)、覆蓋安裝、應用啟動( 啟動各個頁面(閃屏\引導?)被中斷(返回,Home,後臺殺死)後,程式正常)、升級、賬號退出登入Token上報(用於push);

第二章:功能自動化

基於Jmeter的自動化實踐:
優點:
1.支援豐富協議,對http支援較為全面;
2.支援豐富的斷言;
3.可以直連DB檢查資料,配置JDBC Connection Configuration,JDBC Request用sql檢查。
4.支援內嵌自定義指令碼,比如後面的介面依賴前面介面的響應資料,用BSF PostProcessor可以插入java或js指令碼;
5.提供GUI。

第三章:UI自動化

APP UI自動化測試框架:
UI自動化開展的基礎:UI Automator Viewer:可以檢視UI的控制元件名、id等
UI自動化測試方法:
1.Instrumentation
2.UIAutomator
3.基於Instrumentation/UIAutomator的封裝,如Robotium、Appium;
4.基於系統事件的自動化測試,ADB shell獲取事件getevent;
5.基於影象識別的自動化測試;

UI層面的很多操作斷言需要校驗資料庫或介面,此時使用測試工具串聯UI自動化和非UI斷言,比如Jmeter提供了一個取樣器“OS Process Sampler”,可以用來執行命令列,Jmeter可以用JDBC Request Sampler來和DB互動。反之,在封裝過的UI指令碼中提供訪問介面和DB的能力也行。

第四章:效能測試

HTTP請求:由請求行、訊息報頭、請求正文三部分組成。
code返回1xx:指示資訊,表示請求已被接受,繼續處理;
2xx:成功,請求已被成功處理、理解、接受
3xx:重定向,要完成請求必須更進一步的操作
4xx:客戶端錯誤,請求有語法錯誤或請求無法實現
5xx:服務端錯誤
DNS、FTP、HTTP位於應用層,TCP、UDP位於傳輸層,IP位於網路層
TCP三次握手
效能相關:
1.壓縮:gzip
2.快取,快取時間看Request Header裡的Cache-Control:max-age=600 相當於快取10分鐘,如果是從快取取,status可以看出:Status Code:200 OK (from cache)

web效能工具:PageSpeed(chrome外掛)、WebPageTest(http://www.webpagetest.org/)、
Chrome ADB(可模擬手機相應速度在電腦上檢視)
app端效能工具:MAT(分析Android應用堆記憶體工具,檢測記憶體洩漏)、Instrument(iOS檢測記憶體洩漏)
後端服務效能工具:jmeter

第五章:專項測試

APP專項測試分為:相容性測試、流量測試、電量測試、弱網路測試、穩定性測試、安全測試、環境相關測試、程式碼覆蓋率測試;

相容性測試:從作業系統版本、螢幕解析度、網路型別方面拉出BI統計的TOP X資料進行覆蓋;或者採用雲測試,類似testin的平臺提供了雲測試平臺;

流量測試:
Android流量測試:
1.採用adb自帶的統計功能,讀取android的兩個檔案內容:
proc/uid_stat/{UID} /tcp_snd 傳送資料累計大小
proc/uid_stat/{UID} /tcp_rcv 收到資料累計大小
UID獲取方法:
先獲取PID:ps | grep “app包名”
再獲取UID:cat /proc/{PID}/status
缺點:只提供總量資料,不能分析資料
2.通過系統API獲取流量資料
TrafficStats.getUidRxBytes()
IOS流量測試:
Instruments自帶的Network檢視網路流量
或抓包統計每個請求流量;
常見省流量方法:
1.資料壓縮,圖片,js都進行壓縮處理;
2.不同資料格式採用,json比xml格式要小,WebP格式圖片比jpg、png小;
3.只獲取必要資料,分屏載入或懶載入;
4.快取;
5.針對不同網路條件,訪問策略不同,比如wifi下載入大圖,2g下預設不載入,需使用者下載;

電量測試:
Android電量測試:
1.硬體裝置測試:去掉電池,電量提供走電量表
2.藉助第三方軟體,如GSam Battery Monitor Pro
IOS電量測試:
Instruments自帶的Energy檢視

弱網路測試:
基於charles代理的弱網路模擬

穩定性測試:
1.基於Monkey的穩定性測試;
2.Android ANR(Application Not Responding)問題排查,原因:主執行緒執行消耗過長時間,Android ANR日誌存放在/data/anr/traces.txt中。
將日誌拷貝到可以匯出的資料夾中,cp /data/anr/traces.txt /sdcard/traces.txt
adb匯出到電腦上,adb pull /sdcard/traces.txt 本地路徑

安全測試:
1.安裝包測試
能否反編譯程式碼,開發如果對原始碼中部分敏感資訊(如密碼)進行硬編碼的話,要關注反編譯是否會漏出這部分資訊。反編譯方法:dex2jar結合jd-gui工具檢視原始碼
2.安裝包是否簽名(針對安卓)
jarsigner -verify -verbose -certs apk路徑
執行結果為jar 已驗證,說明簽名驗證成功。
3.許可權設定檢查,安卓可檢查mainfest檔案。
4.敏感資訊測試,
·資料庫是否儲存敏感資訊
·日誌中是否存在敏感資訊
·配置檔案中是否存在敏感資訊
5.軟鍵盤劫持
尤其是金融類app,輸入敏感資訊時最好使用app內的軟鍵盤,而不要使用第三方鍵盤,否則資訊容易洩露;
6.賬號安全
·密碼不能明文儲存資料庫
·密碼傳輸是否加密
·賬號鎖定,輸錯多次,臨時鎖定
·同時會話,多個終端會話時,需要提醒使用者密碼可能洩露
7.資料通訊安全,關鍵資訊傳輸是否要HTTPS,數字證書合法性進行校驗

環境相關測試
1.干擾測試,如用App時被打斷的情況,比如一個電話,一條簡訊,通知欄資訊,無電彈框提醒,第三方安全軟體告警框彈出等。
2.許可權測試,關閉相應許可權後,app應對是否恰當。
3.邊界測試
·沒有sd卡/雙sd卡
·飛航模式
·系統時間有誤(早於或晚於標準時間)
·第三方依賴,比如App裡依賴微信,qq,如果沒有安裝微信qq或裝的版本過低的情況。

Android定位測試
模擬器模擬,可以用DDMS進行經緯度設定,android studio自帶DDMS。原理:呼叫adb shell的geo fix [經度] [緯度]

第六章 輔助測試方法
1.程式碼掃描
Android靜態程式碼掃描:FindBugs—–Android Studio下面的外掛,發現java問題較多;
Lint,發現無用資原始檔殘留,Android API相容問題等,針對Gradle構建的專案,用gradle lint即可檢測;
所以要結合這兩種工具掃描。
IOS靜態程式碼掃描:Xcode提供了Analyze功能

第七章 釋出過程中的質量管理
後端釋出:需要有並行釋出的能力,應對機器比較多的情況,縮短髮布耗時。
Android 灰度釋出原理:根據使用者ID,選擇少數使用者,讓服務端返回客戶端最新版本資訊,提示升級。