一、web測試和app測試的相同點和區別?
相同點:都離不開測試的基礎知識和測試原理。具體包括以下幾個方面。
測試用例,均使用邊界值分析法,等價類划分法等。
多數采用黑盒測試,來驗證業務功能是否能得到正確的應用。
需要檢查界面布局,風格,按鈕是否美觀、簡潔,是否統一。
測試頁面載入和翻頁的速度、登錄時長、內存是否溢出等。
測試應用系統的穩定性。
不同點:相對於web測試來說,app測試要考慮手機本身固有的屬性,所以app測試還需要注意以下幾點。
中斷測試(來電去電,短信,藍牙,NFC支付,鬧鍾,數據線插拔,鎖屏,斷電,關機重啟等)
安裝卸載測試(全新安裝,新版本覆蓋舊版本,卸載舊版本安裝新版本,卸載新版本安裝舊版本)
外在因素測試(網絡切換,硬件按鍵,不同分辨率,兼容性,系統,系統版本)
web測試更多的是考慮自身功能和瀏覽器兼容。
二、如何測試一個App的登錄場景?
APP登錄場景大體從以下幾個方面進行:
頁面基本元素的操作。
大量字符,特殊字符,邊界值,必填項校驗。
注冊手機號的特殊性驗證,注冊郵箱的格式驗證。
密碼大小寫是否敏感,密碼是否加密展示,密碼是否有可見按鈕功能,密碼框能否使用復制粘貼。
驗證碼校驗:必填項,過期,錯誤,無網絡時獲取驗證碼,多次獲取,超過獲取次數,輸入驗證碼后,修改手機號。
登錄時與系統的交互:鎖屏,藍牙,home,后退,橫豎屏,修改字體字號。
逆向思維:已注冊賬號注冊,未注冊賬號忘記密碼,未注冊賬號登錄,注冊過程中退出再次注冊。
輸入法交互,切換輸入法,切換輸入模式,手寫/九宮格。
登錄賬號的多樣性:多個賬號輪流登錄,同一個賬號多角色登錄。
第三方登錄驗證:賬號授權,信息正確,取消授權。
登錄頁面跳轉,返回,登錄成功及其他頁面跳轉。
手機兼容性測試:分辨率兼容,系統兼容,系統版本兼容,App版本兼容。
網絡切換,網絡斷開,弱網。
三、Push消息如何測試?
Push消息的測試可以從以下幾個方面進行:
檢查Push消息是否按照指定的業務規則發送。
檢查不接收推送消息時,用戶不會再接收到Push消息。
如果用戶設置了免打擾的時間段,檢查在免打擾時間段內,用戶接收不到Push。在非免打擾時間段內,用戶能正常收到Push。
當Push消息是針對登錄用戶的時候,需要檢查收到的Push與用戶身份是否相符,沒有錯誤的將其他人的消息推送過來。一般情況下,只對手機上最后一個登錄用戶進行消息推送。
測試Push時,在開關機、待機狀態下執行推送,消息及其推送跳轉的正確性。
push消息時,會有紅點展示,推送消息閱讀前后數字的變化是否正確;
應用在開發、未打開狀態、應用啟動且在后台運行的情況下是push顯示和跳轉是否正確。
多條推送的合集的顯示和跳轉是否正確。
四、App的閃退通常是什么原因造成的?
APP閃退的原因可能是:
緩存垃圾太多,Android系統的特性,如果長時間不清理垃圾文件,會導致越來越卡,甚至閃退。
運行程序太多,導致內存不足。
應用版本兼容問題,分辨率兼容問題。
APP中訪問網絡的地方,組件能否正常下載並顯示。
APP的SDK與手機系統不兼容。
系統升級后,新版本不兼容老版本的API,返回對象失敗,報空指針。
軟件權限未開放。
五、測試過程中遇到app出現crash或者ANR,你會怎么處理?
APP出現Crash或ANR,可以從以下幾個方面處理:
可以先把日志過濾出來:adb logcat | findstr xxxxx(過濾日志信息) ;
然后再搜索其中的關鍵字,比如:exception、crash,看看是哪些方法或者異常導致了問題;
初步定位問題原因后,可以交給開發人員去具體查找深層原因並修復。
六、你平常會看日志嗎, 一般會出現哪些異常(Exception)?
這個主要是面試官考察你會不會看日志,是不是看得懂Java里面拋出的異常,一般面試中Java Exception(runtimeException )是必會被問到的問題,app崩潰的常見原因應該也是這些了。常見的異常列出四五種,是基本要求。
常見的幾種如下:
NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常
IllegalArgumentException - 傳遞非法參數異常
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支持的操作異常
七、APP 測試的內容主要包括哪些,如何開展?
APP測試的進行,可以從以下幾個方面展開:
功能測試:
業務邏輯正確性測試:依據產品文檔->測試用例編寫。
兼容性測試:
1.系統版本:Android:官方版本,定制版本;IOS:官方提供版本。
2.分辨率:720 * 1280 1080* 1920。
3.網絡情況:2g 3g 4g 5g Wi-Fi。
異常測試:
1.熱啟動應用:應用在后台長時間待機;應用在后台待機過程中,手機重啟。
2.網絡切換和中斷恢復:網絡切換;中斷恢復。
3.電話信息中斷恢復。
升級,安裝,卸載測試:
1.升級測試:臨近版本升級(1.0->1.1);跨版本(1.0->…->2.2)。
2.安裝測試:首次安裝;覆蓋安裝(同版本,不同版本覆蓋);卸載后安裝。
3.卸載測試:首次卸載;卸載安裝后再卸載。
健壯性測試:
1.手機資源消耗:cpu,內存。
2.流量消耗:圖片,數據,視頻。
3.電量測試。
4.崩潰恢復。
八、APP性能測試關注點及常見APP性能測試工具
1、性能關注點
包體大小:
包體大小能被列為性能指標,是從APP性能指標及運營兩個維度考慮的,用戶是更希望包體小的同時性能要好,有時它們會是一個互相取舍的關系。
啟動時長:
移動應用的啟動時間是用戶體驗的一個重要方面,IOS一直建議盡可能的縮短啟動時間,防止用戶不願意使用它們。對於瀏覽器而言,由於程序啟動時還會有教育頁和閃屏的下發,因此啟動時間的獲取顯得尤為重要。
啟動時間分為冷啟動時間和熱啟動時間,所謂的“冷啟動”,就是一個完全沒有運行的應用的啟動時間,與熱啟動(應用已經在后台運行,某個事件將其帶至前台)相比,由於此時系統尚未建立緩存,因此冷啟動往往要較平時(熱啟動)耗費更長的時間。
內存使用:
在Android系統中,每個APP進程除了同其他進程共享(shared dirty)外,還獨用私有內存(private dirty),通常我們使用PSS(=私有內存+比例分配共享內存)來衡量一個APP的內存開銷。移動設備的內存資源是非常有限,為每個APP進程分配的私有內存也是有限制。一方面我們要合理的申請內存使用,以免導致頻繁的GC(垃圾回收機制)影響性能和大對象申請發生內存溢出;另一方面,我們要及時釋放內存,以免發生內存泄漏。
CPU占用率:
一般情況下,用主流手機使用APP20%-40%的CPU占用率算是合理的,當然這個數值隨着近年來手機硬件配置的提高,會略微下降,如果CPU占用率超過80%就非常值得我們去關注了。
圖片處理器每秒刷新的幀數(FPS):
可用來指示頁面是否平滑的渲染。手機APP幀率FPS,30-60都可接受,上了60對於人眼主觀感受差別就不大了。對於移動應用開發而言,並不是FPS越高就一定越好,FPS取決於顯卡,其次是內存、CPU,然后是網絡。故綜合APP其他性能指標,選擇一個適合的FPS即可。
電量:
相對於PC來說,移動設備的電池電量是非常有限的,保持持久的續航能力尤為重要。另外,android的很多特性都比較耗電(如屏幕,GPS,sensor傳感器,喚醒機制,CPU,連網等的使用),我們必須要慎重檢查APP的電量使用,以免導致用戶手機耗電發熱,帶來不良體驗。
流量:
目前的網絡類型包含2G\3G\4G\5G\wifi,其中還有不同運營商的區分,我們在APP的使用中經常遇到大資源,重復請求,調用響應慢,調用失敗等各種情況。在不同的網絡類型之下,我們不僅要控制流量使用,還需要加快請求的響應。另外,對於需要聯網的手游來說,部分游戲對不同聯網方式的網絡類型采用了不同的流量消耗策略,主要分為wifi環境和蜂窩網絡環境。所以針對不同的游戲,我們統計流量消耗時,可能要連接不同的網絡進行測試。
2、app性能測試工具
GT和iTest,Emmagee APT ,DDMS ,手機自帶開發者選項中的工具,也可以通過adb命令來查看等
九、如何對app進行弱網測試
一款APP針對不同網絡情況下都需要保證不會崩潰,同時盡可能做到在弱網情況下也能達到功能正常使用,或者使用體驗達到最佳。弱網測試可以測試APP的加載時間、可用性、穩定性和健壯性。這時我們就可以借助工具來模擬不同的網絡狀況,模擬2G、3G或弱網情況進行測試。工具可以選擇Fiddler也可以選擇Charles也可以選擇其他工具。
十、常見的 adb 命令
注:adb 使用的端口號是5037,以下總結工作中常用到的adb命令。
1.查看幫助手冊列出所有的選項說明及子命令:
adb help
獲取設備列表及設備狀態:
adb devices
3.安裝應用:adb install 路徑\xx.apk, 安裝應用;adb install -r 重新安裝。
adb install adb install -r
獲取設備的狀態,設備的狀態有 device , offline , unknown3種,其中device:設備正常連接,offline:連接出現異常,設備無響應,unknown:沒有連接設備。
adb get-state
5.卸載應用:adb uninstall <包名>, 后面的參數是應用的包名,區別於 apk 文件名。
adb uninstall
6.將 Android 設備上的文件或者文件夾復制到電腦本地:adb pull <遠程路徑> <本地路徑>, 如復制 Sdcard 下的 pull.txt 文件到 D 盤:adb pull sdcard/pull.txt d:\,重命名:adb pull sdcard/pull.txt d:\rename.txt。
adb pull
7.推送本地文件至 Android 設備:adb push <本地路徑> <遠程路徑>, 如推送 D 盤下的 ITester.txt 至 Sdcard:adb push d:\ITester.txt sdcard/ (注意sdcard 后面的斜杠不能少)。
adb push
8.結束和啟動adb服務:adb kill-server /adb start-server , 結束 adb 服務/啟動 adb 服務,通常兩個命令一起用,設備狀態異常時使用 kill-server,運行 start-server 進行重啟服務。
adb kill-server adb start-server
9.打印及清除系統日志:adb logcat , 打印 Android 的系統日志 ;adb logcat -c,清除日志。
adb logcat
adb logcat -c
10.查找包名/活動名
adb logcat | findstr START
11.生成bugreport文件:adb bugreport , 打印dumpsys、dumpstate、logcat的輸出,也是用於分析錯誤,輸出比較多,建議重定向到一個文件中,如adb bugreport > d:\bugreport.log。
adb bugreport
重啟 Android 設備:adb reboot , adb reboot recovery,重啟到Recovery界面; adb reboot bootloader,重啟到bootloader界面。
adb reboot
adb reboot recovery
adb reboot bootloader
13.獲取 root 權限:adb root , adb remount,可以直接獲取 root 權限,並掛載系統文件系統為可讀寫狀態。
adb root
adb remount
14.返回設備序列號SN值:
adb get-serialno
15.獲取設備的ID:
adb get-product
16.進入設備shell:
adb shell
17.列出所有的應用的包名:
adb shell pm list package
18.截屏並保存至 sdcard 目錄:
adb shell screencap -p /sdcard/screen.png
19.錄制視頻並保存至sdcard:adb shell screenrecord sdcard/record.mp4,執行命令后操作手機,ctrl + c 結束錄制,錄制結果保存至 sdcard:
adb shell screenrecord sdcard/record.mp4
20.獲取設備分辨率:
adb shell wm size
21.列出指定應用的 dump 信息,adb shell pm dump 包名。
adb shell pm dump
22.列出對應包名的 .apk 位置,adb shell pm path 包名。
adb shell pm path
23.查看當前終端中的進程信息:
adb shell ps
24.monkey測試:adb shell monkey –p 程序包 –v 測試次數 ,比如“adb shell monkey –p com.htc.Weather –v 20000”意思是對com.htc.Weather 這個程序包單獨進行一次20000次的monkey測試。
adb shell monkey –p 程序包 –v 測試次數
25.顯示所有程序包:
adb shell ps | grep [process]
26.根據進程pid或包名查看進程占用的內存:
adb shell dumpsys meminfo<pid>
adb shell dumpsys meminfo<package_name>
27. APP 啟動:
adb shell am start -n packageName/activity
APP 關閉:
adb shell am force-stop 包名
29.監控 APP 啟動時間:
adb shell am start -W packageName/activity