一、 手機測試概念
傳統手機測試 VS 手機應用軟件測試
- 傳統手機測試:指測試手機本身比如抗壓,抗摔,抗疲勞,抗低溫高溫等。也包括手機本身功能、性能等測試。
- 手機應用軟件測試 C/S Client/Server
手機應用軟件是基于手機操作系統之上開發出來的軟件,做這樣的測試就叫做手機應用軟件測試。
二、手機端常規測試
2.1.What
2.1.1.介紹手機測試的概念架構
對于手機端測試,按照平臺來分,分為Android和IOS兩大主流系統
- Android后綴apk,ios后綴是IPA(iPhoneApplication)
- Android開源導致碎片化比較嚴重,(手機品牌眾多,系統版本各異,分辨率不統一,主流手機型號上千。無法保證應用、游戲對于所有手機的適配兼容。)bug比較多,而IOS通常bug會少一些。
- Android手機長按home鍵,會呼出應用列表和切換應用,右滑擇會終止應用。
還有分辨率測試,Android手機分辨率有20多種,IOS較少一些 - 再就是手機操作系統,Android系統太多了,IOS較少,但是升級之后不能夠降級,不過呢,發現了最近ios中boss直聘的一個bug,是有關于Boss直聘強更的一個bug,當我們點擊手機APP端 Boss直聘 進入主頁面彈出提示框“新增郵箱上傳附件簡歷功能” 彈窗中有立即升級的鏈接,點擊別的區域沒有反應;必須點擊“立即升級”才會跳轉到“App Store”若不升級,重新切換回Boss直聘界面,依舊提示“立即升級”全部退出依然如此。
- 按照目前技術架構的話,現在有一些原生的app架構,類似于Client Server架構,也有基于Html5的app,類似于pc機的BS(Broswer server)架構。手機測試和pc機類似,又有一些不同的地方。
- 當然除了手機,現在還有好多使用Android系統,比如酒店點餐的平板,銀行對公或者對個人業務的業務平臺,還有一些智能的穿戴設備,小米的手環,google 聯想的智能眼鏡,智能家居,電視盒子,這些都是在使用android系統,我之前最早的時候,就要測試過一個智能家居設備,測試的時候需要考慮藍牙,wifi連接傳輸這塊,也有好多要測試的內容。
2.2.How
1.1.2. 功能測試
對于手機app來說,和我們測試web項目差不太多,也是各種測試方式需要考慮進來,比如說邏輯功能測試,現在移動端越來越火爆,大家用的軟件也越來越多,對軟件也越來越挑剔,現在公司在開發移動端的時候,肯定是有相應的需求文檔和UI所設計的產品效果圖,我們做邏輯功能測試,就是根據這些資料,當然也根據我們正常人的邏輯思維進行邏輯功能測試,在做邏輯功能測試的時候,我們要測試主頁面,我的頁面,商城頁面這些功能是否合理。
1.1.3.安裝與卸載測試
軟件安裝后是否可以正常運行,安裝過程中是否可以取消,安裝空間不足時,是否有相應提示,是否可以卸載應用(可通過桌面卸載,也可以通過軟件卸載。曾發現在IOS手機上有個應用安裝時未完全安裝,終止安裝后,未完成安裝的應用圖標一直顯示在手機上,并且無法成功刪除),卸載是否支持取消功能,單擊取消后軟件卸載功能是否正常,卸載后文件是否全部刪除所有的安裝文件夾,從不同的應用市場下載進行安裝測試,比如測試小米市場,華為市場,應用寶,安卓市場,安智市場的安裝測試。
1.1.4. 軟件升級測試
當客戶端有新版本時,是否有更新提示,當版本為非強制升級版時,用戶可以取消更新,老版本能正常使用,用戶在下次啟動app時,仍能出現更新提示;當版本為強制升級版時,當給出強制更新后用戶沒有做更新時,退出客戶端,下次啟動app時,仍出現強制升級提示,當然現在強更已經很少出現了。檢查更新后各個功能是否能正常使用;在線跨版本升級后能否正常使用,當然現在主流的安裝更新方式開始向熱更新熱部署方式轉變,就是在用戶不需要手動更新的情況下,完成版本的靜默更新,這個技術是有難度的,需要看公司中程序員的技術能力還有就是是否有這樣的產品需求。
1.1.5. 登錄測試
對于登錄測試,基本上每一款app都有登錄注冊功能,所以在測試App的時候,登錄測試是必不可少的一項。
我們做登錄測試的時候,往往包含這么些項:
- 登錄用戶名和密碼錯誤時,界面有提示信息;
- 用戶主動退出登陸后,下次進入app時,應該進入登陸界面;
- 密碼更改后,登錄時是否做到了有效數據的校驗,對于未登錄狀態時,一些頁面的操作,是否做了控制;
- 切換賬號登錄,檢驗登錄的信息是否做到及時更新,對于多個端(web、iso、android等)進行操作時,確保數據庫操作無誤,且每個端可以及時看到數據的更新,一個賬號只允許一臺機器登陸的軟件,需要賬號登錄多個手機時,是否將原用戶踢下線,且能夠給出提示信息,用戶登錄狀態太久,session會過期,會出現“雖然是登錄狀態,系統會提示用戶沒有登陸”
1.1.6.安全性測試 - 權限測試
對于手機權限,如果我們是剛開發不知名的app,權限這塊盡量少一些,這些權限在安裝的時候都必須用戶同意。在Android 6.0之后,權限需要動態的申請,我們測試的時候,需要測試在使用到這些權限的時候,程序員是否做邏輯判斷,用戶同意權限應該怎么操作,不同意權限又應該怎么操作。
1.1.7.消息推送測試
消息推送,是移動端的一大特色。我就說一下消息推送我們所做的這些方面吧,
未鎖屏時,應用后臺運行,消息推送是否可正常接收,未鎖屏時,APP客戶端使用過程中,可以收到消息提醒,且點擊可查看。
鎖屏時,手機消息欄是否可以接收到消息提醒。且點擊可查看。點擊后消息欄中消失。
精準推送
當推送消息是針對登錄用戶的時候,需要檢查收到的push與用戶身份是否相符,沒有錯誤的將其他人的消息推送過來
push推送消息是是否能有針對性的推送,如相應內容推送給相應用戶(精準推送)
退出登錄后,是否接受push推送(根據需求來)
1.1.8.前后臺切換測試(鎖屏)
APP切換到后臺,再回到APP,檢查是否停留在上一次操作界面;檢查功能及應用狀態是否正常;程序是否崩潰,功能狀態是否正常,尤其是對于從后臺切換回前臺數據有自動更新的時候
手機鎖屏解屏后進入app注意是否會崩潰,功能狀態是否正常
當APP使用過程中有電話進來中斷后再切換到APP,功能狀態是否正常
當關閉APP進程后,在開啟APP,APP能否正常啟動
對于有數據交換的頁面,尤其是有視頻圖片之類的頁面,每個頁面都必須要進行前后臺切換、鎖屏的測試,這種頁面最容易出現崩潰
1.1.9.UI測試(界面測試)
確保產品UI符合產品經理制定的原型圖與效果圖
一般涉及界面(如菜單、對話框、窗口和其他可視控件)布局、風格、文字是否正確,頁面是否美觀,操作是否友好。
如:安裝app后的加載頁顯示,分享頁面的產品logo顯示
1.1.10.兼容性測試
我再說一下兼容性測試吧,兼容性測試主要考慮手機的版本,型號,分辨率,就像我說的,現在手機碎片化比較嚴重,各個版本,比如Android,從Android4.0到Android8.0的版本它是不一樣的,然后現在各大手機廠商像華為,三星,小米,錘子,魅族,vivo這些廠商都修改android源代碼,也是給我們增加和好多工作量,好多時候開發的軟件在三星上沒問題,但是華為,小米就不行。還有手機分辨率,現在主流的可能是19201080,但是還有好多其他分辨率,比如7201280,還有一些更大分辨率的手機,都要考慮這些分辨率的兼容,不然用戶視覺體驗就不好。
兼容測試,公司中會買好多測試機來太讓我們進行測試,一般是不同廠商的手機,當然還有第三方云測平臺,比如testin還有騰訊wetest,就可以做兼容性測試。可以一次性測試100臺測試機,同時會有相應的兼容報告,bug報告。
對于IOS,ISO版本有7.1.2、8.3、9.1等;能否適配各種屏幕尺寸。
1.1.11.網絡環境測試
測試2G、3G、4G、wifi、有網、無網、弱網情況下應用的運行
網絡不好時,提交數據是否一直處理提交中,是否會有延遲,數據交換失敗是否會有提醒
有網到無網再到有網環境時,數據是否可以自動恢復,正常加載
無網絡時,各種提示信息是否友好,數據本地化是否正確(比如提示當前已斷開網絡,請檢查網絡設置;還有從wifi環境切換到4G環境提示是否啟用4G網絡,會產生扣費。
1.1.12.mokey測試 (monkey壓力測試 測試為1000-2000)
對于手機測試,除了我們一些常規的功能測試,我們還會做壓力測試,比如對于Android手機,我會使用adb指令進行一些相應的操作,比如通過adb查看設置,進入設備,抓取log,我們測試的時候,會使用adb logcat所抓出來的log日志存到電腦,發給開發,方便他們快速解決bug。
另外,我還會使用monkey對app進行測試,可以使用monkey對app做壓力測試,主要就是測試操作app的時候,程序是否會崩潰。
我們使用adb shell monkey 指定對應的app,執行要測試的次數,指定要觸摸的比率,超時時間和忽略崩潰信息,就可以執行測試,將測試log存到某個位置,然后把測試出的bug 日志發送給開發。300000
我就簡單的說一下測試的指令吧,比如我上邊所說的邏輯,我們用 adb shell mokey -p 指定要測試的包名 --ignore-crashs 忽略崩潰 --ignore-timeout 忽略超時 --throttle 38指定延遲時間毫秒 -s 指定測試種子 指定測試次數,然后將文件 >輸出到磁盤中。
1.1.13.性能測試
對于性能測試,(eclipse和Android studio中本身有檢測cpu和內存的工具,也有檢測手機內存泄漏的工具)靠工具來測試手機cpu占用,內存占用,電池溫度等,以及測試我們的app在后臺持續運行的流量消耗和電量消耗問題。
1.1.14 異常測試
- 熱啟動應用:應用由后臺轉換為前臺的過程
考慮:1.仍然展示退到后臺時的頁面2.希望初始化為首頁 - 網絡切換和中斷恢復
①網絡切換:wifi->2g 4g->3g應用正常可用狀態
②中斷恢復:4g-→斷網-→4g(下載2M的應用,1%斷網,恢復網絡(斷點續傳,重新下載)) - 電話和信息中斷恢復
①電話:看視頻->電話接18分鐘->返回視頻app
②信息:玩游戲一>通知欄一個消息->不影響游戲體驗
三、Android介紹
Android是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用“安卓”或“安致”。
Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨后Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布于2008年10月。Android逐漸擴展到平板電腦及其他領域上,如電視、數碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2013年的第四季度,Android平臺手機的全球市場份額已經達到78.1%。 [1] 2013年09月24日谷歌開發的操作系統Android在迎來了5歲生日,全世界采用這款系統的設備數量已經達到10億臺。
安卓版本:
Android在正式發行之前,最開始擁有兩個內部測試版本,并且以著名的機器人名稱來對其進行命名,它們分別是:阿童木(AndroidBeta),發條機器人(Android 1.0)。后來由于涉及到版權問題,谷歌將其命名規則變更為用甜點作為它們系統版本的代號的命名方法。甜點命名法開始于Android 1.5發布的時候。
作為每個版本代表的甜點的尺寸越變越大,然后按照26個字母數序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松餅(Android 2.0/2.1),凍酸奶(Android 2.2),姜餅(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果凍豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛軋糖(Nougat,Android 7.0),奧利奧(Oreo,Android 8.0),餡餅(Pie,Android 9.0),Q(未命名,Android10.0),R(未命名,Android11.0)
Android的系統架構和其操作系統一樣,采用了分層的架構。
從架構圖看,Android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和Linux內核層
3.1. Android SDK(Software Development Kit)的安裝和配置
Android SDK,即Android Software Development Kit,軟件開發工具包。
它提供了在Windows/Linux/Mac平臺上開發Android應用的開發組件。包含了在Android平臺上開發移動應用程序的各種工具集。
3.2.安裝java環境
3.3.啟動配置好SDK的Android版本eclipse Android Studio(類似Idea)
3.3.1. 檢查是否成功:
cmd → java -version
3.3.2. Android studio安裝
3.3.3. 創建虛擬機
Android App開發一般需要模擬器來測試程序的正確性
Android Virtual Device,就是Android運行的虛擬設備,是Android的模擬器識別。建立的Android App要運行,必須創建AVD,每個AVD上可以配置很多的運行項目。
簡而言之:AVD即用于Android開發調試的模擬機。
AVD name:填寫的虛擬機名稱,純英文和數字組成。
- Device:設定模擬的設備,一般選擇手機型號:3.2QVGA(ADP2)(320480: mdpi)。
- Target:安裝Android的版本,目前4.0是主流,即可選Android4.0.3 API 15。
- CPI/ABi:模擬的CPU型號,這里的ARM是手機的CPU型號。
- Keyboard:務必勾選“Hardware keyboard present”。
- Skin:務必勾選“Display a skin with hardware controls”。
- Front camera/Back camera:是否模擬前置和后置攝像頭,裝有Cam的讀者可以考慮。
- RAM:設置模擬器內存,一般在512~1024M。 VM Heap:每一個應用的最大內存空間分配,默認即可。
- SD Card:選在size上,這個就是在默認目錄里自動建立一個模擬SD卡的文件,SD卡的大小隨意,也可以不填,不填代表不適用SD卡。
3.3.4. 啟動虛擬機
四、ADB
4.1.ADB介紹
ADB全稱Android Debug Bridge, 是android sdk里的一個工具, 用這個工具可以直接操作管理android模擬器或者真實的andriod設備(如G1手機)
它的主要功能有:
- 運行設備的shell(命令行)
- 管理模擬器或設備的端口映射
- 計算機和設備之間上傳/下載文件
- 將本地apk軟件安裝至模擬器或android設備
4.2.配置ADB環境變量
打開:adt-bundle-windows-x86_64_20140101文件
找到adb.exe所在路徑
配置ADB_HOME環境變量
參考java環境變量配置
顯示成功:
4.3.ADB常用指令
- 查看設備:adb devices
這個命令是查看當前連接的設備, 連接到計算機的android設備或者模擬器將會列出顯示 - 安裝軟件:adb install -r (APK路徑)
-r 代表如果apk已安裝,重新安裝apk并保留數據和緩存文件。apk路徑則可以直接將apk文件拖進cmd窗口,記得加空格。 - 卸載軟件
adb uninstall <軟件名>
adb uninstall -k <軟件名>
如果加 -k 參數,為卸載軟件但是保留配置和緩存文件
問程序員--com.example.test -
登錄設備shell
adb shell
adb shell <command命令>
image.png
這個命令將登錄設備的shell.
后面加<command命令>將是直接運行設備命令, 相當于執行遠程命令 -
查看手機內存情況
adb shell dumpsys cpuinfo
image.png -
查看內存情況
adb shell getprop | findstr dalvik 本機內存的使用情況
image.png -
查看應用內存使用情況
adb shell dumpsys meminfo +包名:應用的內存使用情況
image.png -
列出手機裝的所有app的包名:
adb shell pm list packages
image.png -
列出系統應用的所有包名:
adb shell pm list packages -s
image.png -
列出除了系統應用的第三方應用包名:
adb shell pm list packages -3
image.png
4.4.adb logcat 查看手機日志
- adb logcat 命令格式 : adb logcat [選項] [過濾項], 其中 選項 和 過濾項 在 中括號 [] 中, 說明這是可選的;
- 在命令行中輸入 adb logcat --help 命令, 就可以顯示該命令的幫助信息;
- ">"輸出 : ">" 后面跟著要輸出的日志文件, 可以將 logcat 日志輸出到文件中, 使用adb logcat > log 命令
- 指定 logcat 的日志輸出格式 :
-- "-v"選項 : 使用adb logcat -v time 命令, 可以查看日志的輸出時間; - "process"格式 : " 優先級 (進程ID) : 日志信息 ", 使用adb logcat -v process 命令;
- 將手機日志輸出到本地文件中
adb logcat -v time process > C:/log/aa.txt - 有多臺設備是adb選擇設備
adb -s 設備名稱 logcat -v time process >C:/log/aa.txt - Android 的日志分為如下幾個級別:
V —— Verbose(最低,輸出得最多)
D —— Debug
I —— Info
W —— Warning
E —— Error
F —— Fatal
S —— Silent(最高,啥也不輸出)
按某級別過濾日志則會將該級別及以上的日志輸出。
比如,命令:adb logcat *:W 將 Warning、Error、Fatal 和 Silent 日志輸出
顯示所有優先級大于等于“warning”的日志
五、APK牢固性(加密)
應用加固
防篡改:通過完整性保護和簽名校驗保護,能有效避免應用被二次打包,杜絕盜版應用的產生;
防逆向:通過對代碼進行隱藏以及加密處理,使攻擊者無法對二進制代碼進行反編譯,獲得源代碼或代碼運行邏輯;
防調試:通過反調試技術,使攻擊者無法調試原生代碼或Java代碼,阻止攻擊者獲取代碼里的敏感數據。
網上有很多Apk加固的第三方平臺,最有名的應當屬于:愛加密和梆梆加固了。其實加固說的簡單點就是對源Apk進行加密,然后在套上一層殼即可
六、Monkey測試
6.1.參考資料
http://blog.csdn.net/jlminghui/article/details/38238443
6.2.Money介紹
顧名思義,Monkey就是猴子, Monkey測試,就像一只猴子, 在電腦面前,亂敲鍵盤在測試。
通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、 按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。
6.3.Monkey用來做什么
Monkey 主要用于Android 的壓力測試自動的一個壓力測試小工具, 主要目的就是為了測試app 是否會Crash(崩潰)。
6.4. Monkey 前提條件
- 環境配置:把adb加入系統環境,手機開啟開發者模式
- 連接手機,獲取測試的包名。獲取包名的方法
- Monkey編寫測試命令,并運行。monkey操作命令
如果要提前中結束測試,中斷運行中的monkey
CTRL+C
adb shell ps | grep monkey 返回進程號
adb shell kill [剛才查到的進程號]
6.5Monkey程序介紹
- Monkey程序由Android系統自帶,使用Java語言寫成,在Android文件系統中的存放路徑是: /system/framework/monkey.jar;
- Monkey.jar程序是由一個名為“monkey”的Shell腳本來啟動執行,shell腳本在Android文件系統中 的存放路徑是:/system/bin/monkey;
- Monkey 命令啟動方式:
a)可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試
b)在PC上adb shell 進入Android系統,通過執行 monkey {+命令參數} 來進行Monkey 測試
c ) 在Android機或者模擬器上直接執行monkey 命令,可以在Android機上安裝Android終端模擬器
七、Monkey 命令 基本參數介紹
7.1.使用monkey測試手機所有程序
adb shell monkey 100 執行monkey測試100次 針對rom測試或者
使用adb指令,安裝Login.apk
7.2.-p <允許的包名列表>
adb shell monkey -p com.example.login 100
用此參數指定一個或多個包。指定包之后,monkey將只允許系統啟動指定的app。如果不指定包, monkey將允許系統啟動設備中的所有app。
指定一個包:
7.3.顯示日志詳細程度
用于指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別,分別對應的參數如下 表所示:
Level 0 : adb shell monkey -p com.example.login -v 100 // 缺省值,僅提供啟動提示、測試完成和最終結果等少量信息
Level 1 : adb shell monkey -p com.example.login -v -v 100 // 提供較為詳細的日志,包括每個發送到Activity的事件信息
Level 2 : adb shell monkey -p com.example.login -v -v -v 100 // 最詳細的日志,包括了測試中選中/未選中的Activity信息
7.4.Monkey日志分析
將log信息寫到文檔中
adb shell monkey 100 >c:/log/b.txt
正常情況, 如果Monkey測試順利執行完成, 在log的最后, 會打印出當前執行事件的次數和所花費的時間; // Monkey finished 代表執行完成
隨機數種子
用亍指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。 示例:
monkey測試1:adb shell monkey -p com.shjt.map –s 10 100
monkey測試2:adb shell monkey -p com.shjt.map –s 10 100
7.5.--throttle <毫秒>
用亍指定用戶操作(即事件)間的時延,單位是毫秒;如果不指定這個參數,monkey會盡可能快的 生成和發送消息。
例:adb shell monkey -p com.example.login --throttle 300 100
表示執行100個偽隨機用戶事件流,事件間隔為300毫秒。
注:一般設置為300毫秒,原因是實際用戶操作的最快300毫秒左右一個動作事件。
7.6.--pct-touch <percent>
調整觸摸事件的百分比。(觸摸事件是指在屏幕中的一個down-up事件,即在屏幕某處按下并抬起的操作)
–pct-touch:觸摸事件。即在某一位置的Down-Up(手指的放下和抬起)事件。Down(ACTION_DOWN)和Up(ACTION_UP)的坐標臨近,但并非相同。
如:adb shell monkey -pct-touch 67 -v 10
表示執行10個偽隨機用戶事件流,并調整其中觸摸事件的百分比為67%。
注:此參數設置要適應當前被測應用程序的操作,比如一個應用80%的操作都是觸摸,那就可以將此參數的百分比設置成相應較高的百分比。
7.7.--pct-motion <percent>
調整motion事件百分比。(motion事件是由屏幕上某處一個down事件、一系列偽隨機的移動事件和一個up事件組成)
–pct-motion:動作事件。以Down(ACTION_DOWN)開始,Up(ACTION_UP)結尾,中間至少有一次Move(ACTION_MOVE)。
如:adb shell monkey -pct-motion 67 -v 10
表示執行10個偽隨機用戶事件流,并調整其中動作事件的百分比為67%。
注:這里的移動是直線滑動
7.8.--ignore-crashes
作用:通常,應用發生崩潰或異常時Monkey會停止運行。如果設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
正常操作,不忽略異常
忽略異常
7.9.--ignore-timeouts(ANR)
作用:通常,應用程序發生任何超時錯誤(如“Application Not responding”對話框)Monkey將停止運行,設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
7.10.Monkey 實例
用monkey 命令 對登錄apk進行 性能測試
monkey -p com.tencent.mtaexample -s 23 --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
- -p后面接著的對應的包名,如果是整機測試,就不需要 -p package_name
- -s后面是對應的種子數,好像就是操作步驟,根據她們測試的經驗,一般種子數在23,同步她們測試的結果,一般種子的個數固定為23,和她們選擇的操作步驟就是同步的。
- --ignore-crashes --ignore-timeouts 這里是在monkey測試的過程中遇到carash或者timeout的情況時忽略掉,一般不設置時,出現carash或者timeout時,Monkey測試會終止。這里是防止Monkey測試終止。
- -v 指的是Monkey測試時打印log級別。
- 100000 這里是指點擊的次數,根據她們測試的經驗,對于單個應用程序這個次數設置在100000次就可以了;如果是整機,一般設置在500000次。
/data/local/tmp/log.txt測試的log記錄在手機上/data/local/tmp/ 下面的log.txt里面,這個名字可以自己寫。- 2>&1 固定的寫法,這個也很重要,代表的意思是中間忽略的東東的日志一并輸入到指定的文件中。
- 最后單獨的一個"&" 是一旦Monkey測試開始了,之后可以拔掉數據線,不會影響Monkey測試。
- 測試所有模塊 monkey -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v 1000 >c:\login\c.txt
7.11.Monkey異常分析
一般我們可以一次發送5萬次隨機事件的請求,每個請求之間的間隔為150毫秒,測試大約會進行40min,完成以后就可以查看日志。
日志中可能的錯誤:
1.程序異常退出,uncausedexception (ctrl+f搜索‘Fatal’)
2.程序強制關閉,ForceClosed (簡稱FC) (同上)
3.程序無響應,ApplicationNo Response(ctrl+f搜索‘ANR ’,加空格是為了屏蔽掉一些無效信息)
4.手動生成。
Monkey 執行中斷, 在log最后也能看到當前執行次數
7.12.monkey事件百分比
首先注意一點,這個Event percentages在不同版本的SDK版本中順序可能會不一樣。
下列中monkey源代碼是從android4.4.2SDK中反編譯出來的
由上圖可以看出
Event percentages:
0:--pct-touch//touch
events percentage觸摸事件百分比(觸摸事件是一個在屏幕單一位置的按下-抬起事件)
1:--pct-motion//motion
events percentage手勢事件百分比(手勢事件是由一個在屏幕某處的按下事件、一系列的偽隨機移動、一個抬起事件組成)即一個滑動操作,但是是直線的,不能拐彎
2:--pct-pinchzoom//pinch
zoom events percentage二指縮放百分比,即智能機上的放大縮小手勢操作
3:--pct-trackball//trackball 即單純的Move(ACTION_MOVE)
events percentage軌跡球事件百分比(軌跡球事件包括一個或多個隨機移動,有時還伴有點擊。軌跡球現在智能手機上已經沒有了,就是類似手柄的方向鍵一樣)
4:--pct-rotation//screen
rotation events percentage屏幕旋轉百分比,橫屏豎屏
5:--pct-nav//nav 基本導航事件。即來自于方向輸入設備的上下左右操作。
events percentage”基本”導航事件百分比(導航事件包括上下左右,如方向輸入設備的輸入)老手機的上下左右鍵,智能機上沒有
6:--pct-majornav//major 即Navigation Bar的確認,菜單,返回鍵等
nav events percentage”主要”導航事件百分比(這些導航事件通常會引發UI的事件,例如5-way pad的中間鍵、回退鍵、菜單鍵)
7:--pct-syskeys//system(key)
operations percentage”系統”按鈕事件百分比(這些按鈕一般專供系統使用,如Home, Back, Start Call, End Call,音量控制)
8:--pct-appswitch//app
switch events percentage啟動activity事件百分比。在隨機的間隔里,Monkey會執行一個startActivity()調用,作為最大程度覆蓋包中全部Activity的一種方法
9:--pct-flip//keyboard
flip percentage鍵盤輕彈百分比,如點擊輸入框,鍵盤彈起,點擊輸入框以外區域,鍵盤收回
10:--pct-anyevent//anyevents 該事件可能包含其他上述事件。
percentage其他類型事件百分比。包括了其他所有的類型事件,如按鍵、其他不常用的設備上的按鈕等等。
八、手機兼容性測試
Android App兼容性測試,是一個比較重要的App評價內容,
說到測試階段,兼容性測試主要是對App在各類機型上的兼容、適配等情況進行測試。搞清楚這一階段的測試重點后,因此,Android App在進行兼容性測試前,一定要做好其前序測試內容,否則兼容性測試效果將會較差。
8.1.機型配置問題。
Android兼容測試一定要做到寬范圍覆蓋,如果做不到這個,那么就違背了兼容性測試的目標——測試App在各類機型、系統上的運行是否兼容、適配。
因此,兼容性測試必須要在各個機型、系統上對App進行運行、測試,查看相關UI是否適配、功能是否正常。所以,必須要為兼容性測試配備盡可能多的機型。這是不是意味著,你的公司要去購置各類機型設備?當然不是。對于一般的公司或者開發者,這將會是一大筆開銷,為了節約資金而造成進行覆蓋率較低的話,則失去了兼容性測試的意義。另外,這也是沒必要的,因為往往你就一個或兩三個App,為了這少量App測試,而去購置如此大量的設備,無疑是一種資源浪費。除此,還有一個原因,將在兼容性測試如何展開里去說。除此,機型量的多少也是一個權衡的過程,目前,通用的兼容性測試一般覆蓋Top100-300的機型,對于實在是小量機型或者老舊機型,用戶量非常小,在一定程度上,是否需要覆蓋則需要權衡,總的來說,Top排名的手機基本足夠。
8.2.兼容性如何展開?
這是一個經驗性的過程,可以去借鑒大型互聯網公司的成熟App的測試方法。目前,無論是國際知名App,還是國內知名App,谷歌、Facebook,BAT等,他們都有大量的App對外推出,對于App兼容性要求非常高,因此,他們的做法是非常值得借鑒的。這些公司的兼容性測試,都有一個相同的解決方案,那就是自動化測試框架與平臺的實現。通過瀏覽上述公司在各種大會公布的內容,或者通過論壇知識分享,都能看到,他們不僅有自己的測試實驗室,擁有大量的手機,除此,還有一整套的自動化測試平臺,來完成兼容性測試。
8.3.有哪些好用的App云測試平臺?
目前對移動App的測試主要指的是下面幾部分:
兼容性測試——App對不同手機、操作系統版本的兼容性測試,包括安裝、啟動、卸載等。
功能測試——遍歷應用的每一個角落,查看應用的功能、邏輯是否正常,完整。
性能測試——應用的性能怎樣,如啟動時間、反應時間、CPU占用率,內存占用率等。
穩定性測試——在一定時間內對App進行持續地測試,測試App運行的穩定性。
網絡場景測試——測試不同網絡環境中App的運行狀況,如2G&3G,弱網絡等。
以下是國內幾家主要的云測試平臺:
Testin:Testin云測|全球領先的App及手游測試平臺
Testin是國內較早涉足云測試領域的公司之一。Testin在云端部署了300多款1000多部測試終端,終端種類及數量都比較全面。支持Android與iOS系統。但目前僅少部分服務為免費,絕大多數服務為收費項目,故而使用成本較高,具體收費情況請查看官網的介紹。
騰訊優測:優測網-讓測試更簡單
騰訊優測是騰訊旗下的云測試服務平臺,擁有超過1000款測試終端,機型數量龐大。但僅支持Android,暫不支持iOS系統。提供兼容性測試服務,不提供性能測試、功能測試及穩定性測試服務。另外,騰訊優測還提供“云手機”服務,開發者可以遠程控制測試終端,實時查看App安裝、運行效果。優測目前的功能為收費(新注冊的用戶可獲得官方贈送的禮包),每天限制提交2次測試。
移動測試學習端口:https://wetest.qq.com/guide/learn-source
貫眾云測試:貫眾云測試
貫眾云測試是中國移動旗下的云測試服務平臺,目前擁有超過100款市面主流終端,支持Android及iOS系統。提供兼容性測試、功能測試、性能測試,穩定性測試(12小時)及網絡場景測試服務(2G&3G&4G)。支持Appium腳本。缺點是終端數量較少,優點是功能較為全面,且基本功能都是免費,使用成本還是蠻低的。
百度MTC:百度移動云測試中心
百度MTC是百度開放平臺旗下的移動云測試中心。提供超過500款熱門機型,目前只支持Android系統,暫不支持iOS系統。提供的測試服務種類有兼容性測試、性能測試、功能測試。并且提供了腳本錄制工具,類似Testin。但腳本錄制工具更新速度較慢。百度MTC的服務目前為收費服務,具體收費情況請查看官網的介紹。
阿里MQC:MQC 阿里移動質量中心
阿里MQC是阿里巴巴旗下的移動測試平臺。提供上百款測試終端,支持Android及iOS系統。提供兼容性測試、功能測試、性能測試以及穩定性測試(1小時)。測試腳本需使用Robotium或Appium測試框架編寫,難度較高。MQC也提供了遠程的真機調試,功能和騰訊優測類似,看來騰訊和阿里還真是一對兒冤家啊。
8.4.騰訊云測兼容性報告
8.5. 百度MTC-移動云測試中心
百度MTC是百度開放平臺旗下的移動云測試中心。提供超過500款熱門機型,目前只支持Android系統,暫不支持iOS系統。提供的測試服務種類有兼容性測試、性能測試、功能測試。并且提供了腳本錄制工具,類似Testin。但腳本錄制工具更新速度較慢。百度MTC的服務目前為收費服務。
1、移動app測試服務包含:自動化測試、人工測試、用戶接受度評測、遠程真機調試。點擊創建測試任務即可
2、以功能回放測試為例:創建測試任務。步驟為上傳app,上傳用例,選擇測試終端,截圖,郵件。
3、測試報告包含:應用基本信息、結論總覽、問題分布、問題列表、問題終端分布、性能結論、性能分析、內存占用分析、終端列表。
點擊進入終端詳細報告,包含內容:終端信息、測試結果、性能結果、測試截圖、安裝日志、logcat日志、腳本日志、性能詳情、屏幕錄像。
8.6.各款云測試平臺對比
8.7.總體總結
1、真機租用:Testin云測和AWS Device Farm,均包含iOS和Android,型號全,優先推薦。
2、AWS Device Farm支持框架Appium Java JUnit、Appium Java TestNG、Appium Python、Calabash、Instrumentation 、UI Automation 和 XCTest,終端支持Android和iOS,web,優先推薦
AWS Device Farm支持網絡場景選擇,其他均不支持。但是它的性能指標比較少,只有三項,CPU,Memroy,Threads
3、百度MTC支持Appium、Robotium、Uiautomator框架,但是創建測試任務時,過于簡單,具體測試內容展示不明確。
深度性能測試無亮點,與兼容性測試中的性能數據無明顯優勢。
4、阿里MQC支持在線錄制腳本,自行編寫腳本支持Appium、Robotium框架
測試服務類型分布清晰,按測試系統劃分,支持Android,iOS,yunos。創建測試任務時,測試步驟類型表述清晰。
5、騰訊優測-Xtest工具,支持錄制腳本。深度測試服務的報告很全面,但是價格稍貴。
6、Testin是國內較早涉足云測試領域的公司之一。Testin在云端部署了300多款1000多部測試終端,終端種類及數量都比較全面。支持Android與iOS系統,步驟簡單,便于操作。
九、真機測試
注意:下載手機助手,換一根數據線,
9.1.第一步:讓手機顯示開發者選項
多次點擊版本號,顯示開發者選項
9.2.允許USB調試
若使用真機,用USB將手機和電腦連接,在手機端進行操作:
(1)選擇USB連接方式為設備文件管理;
(2)設置->開啟開發者選項->勾選‘USB調試’(真機和模擬器上皆需進行)。
9.3.檢測連接設備
在終端中輸入’adb devices‘,此時已連接設備列表下應存在設備序列號
9.4.執行相應的測試操作
9.5.同屏
10.作業:
adb devices
adb install xxx
adb uninstall 程序包名
adb shell 進入手機
adb shell dumpsys meminfo +包名:應用的內存使用情況
adb logcat -v time process > C:/log/aa.txt
adb logcat *:W
用monkey 命令 對登錄apk進行 性能測試
adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v 1000 >c:\login\c.txt