1.夜神模擬器的下載及安裝:
https://www.yeshen.com,直接下載,下載之后直接解壓安裝即可
2.啟動夜神模擬器
3.adb介紹:
android debug bridge安卓調試連接橋;pc端的操作與移動端的操作實現建立連接的核心就是adb;它實際是一種客戶端-服務器應用程序(C/S),主要包括以下三個組件:
a.客戶端:用於進行發送命令的,可以通過adb命令從命令行終端中調用出客戶端
b.服務端:用於實現管理客戶端與守護進程之間的通訊,服務端在開發計算機上作為后台進程運行
c.守護進程(adbd):在設備上、模擬器上運行命令
adb原理描述:
1)當adb客戶端進行啟動時,會檢測是否啟動了adb的服務器進程。並且服務器啟動的時候會綁定特定的端口5037(默認),並監聽adb客戶端發送過來的命令,那么adb客戶端就與adb服務端進行建立了連接
2)服務器會與所在運行的模擬器或者設備進行建立連接,服務器會通過掃描對應的端口查找模擬器(5555-5585),只要服務器一旦發現存在adb守護進程的話,那么就會與對應的端口模擬進行建立連接。
4.adb連接夜神模擬器:
1)在夜神模擬器安裝包的bin目錄下找到adb.exe,復制路徑:
2)打開cmd命令行,跳轉到adb.exe的路徑,輸入adb,檢查adb的版本,如下:
3)使用adb devices獲取連接設備信息:
如果夜神模擬器通過adb命令無法獲取到連接設備信息的話,則需要考慮以下幾種情況:使用adb devices獲取當前的設備列表
(1)adb的版本問題
(2)模擬器或者手機是否開啟了adb調試模式(設置-開發者選項-USB調試)
5.adb的常用命令操作:
1)上傳文件到模擬器中:adb push window文件路徑 模擬器設備文件路徑
注意:a.當前模擬器或者設備是否處於root狀態
b.如果提示的是read-only的話,則確保當前root狀態是否實現了讀寫操作,還需要將當前的目錄實現remount操作
c.上傳的時候可以改變其文件的名稱
d.需要注意模擬器操作系統中的目錄權限問題
上傳成功:
2)下載文件到模擬器:adb pull 模擬器設備文件路徑 window文件所在路徑
3)進入到手機操作系統的終端:adb shell,如果存在多個設備連接狀態的話,需要選擇其中一個設備進行操作,則添加參數adb -s 設備名 shell 即可
幾個核心目錄的說明:
4)實現adb進行安裝和卸載一個app應用程序:
安裝一個app:adb install apk所在的路徑;(如果已經安裝了該app,需要實現覆蓋安裝的話,則需要添加一個參數-r)
卸載一個app:adb uninstall app所對應的包名
5)包名的獲取方式:
a.直接到終端的data/data目錄下進行查找
b.通過pm命令進行獲取:package manager:包管理器;使用該命令完成應用程序的查詢、安裝等操作所涉及的應用信息、系統權限等
pm list packages 表示的說去已經安裝的所有應用程序的包名;該命令在終端中輸入的,如果在dos中輸入的話則需要添加adb shell pm list packages
可以額外的添加參數完成過濾的操作;常用的兩個-s表示過濾顯示當前的系統應用包,-3表示只顯示第三方應用包:
c.獲取包名以及活動窗口名(前提:需要將該app先進行啟動):
adb shell dumpsys | find “mFocusedActivity” 該命令是在dos中執行
dumpsys| grep "mFocusedActivity" 該命令在終端中執行
d.通過反編譯apk進行獲取其文件的配置信息,然后查找對應的包名和活動窗口名:
通過androidkiller進行反編譯操作可以直接獲取對應的包名和活動窗口名
e.還可以通過aapt命令完成包名和活動窗口名的獲取操作:
aapt dump badging apk所在的路徑
6)啟動一個app:
am命令是一個命令管理集工具。
-n 參數:直接接組件,由包名和活動窗口名構成,這是啟動一個app的最直接最多的操作方式:
adb shell am start -n 包名/活動窗口名
-d參數:如果需要攜帶網址的話,則可以添加-d參數,例如:打開一個百度地址
adb shell am start -n 瀏覽器包名/瀏覽器活動窗口名 -d 需要打開的網址
問題:測試一個app的啟動時間?
a.通過-W參數完成啟動時間的獲取2.通過日志b.通過日志的形式進行分析篩選獲取啟動時間
7).日志如何獲取:主要是用於進行定位bug
adb logcat或者adb shell logcat 其兩個日志獲取的結果是一樣的,只是表現形式不同而已,一個是以參數的形式存在,一個是以命令的形式存在
將日志保存到文件中
adb shell logcat>d:\android_package\log.txt 表示的是將所有的日志信息全部寫入到指定的文件中,>表示的是覆蓋,>>表示的是追加
篩選日志:警告以上的日志:adb shell logcat *:W>d:\android_package\log.txt
錯誤以上的日志:adb shell logcat *:E>d:\android_package\log.txt
日志級別:
V---Verbose(所有的信息全部輸出,其日志級別是最低的)
D--Debug(調試日志信息)
I---Info(一般日志信息)
W---Warning(警告信息)
E----Error(錯誤信息)
S----Silent(一般不應用,最高級別,啥都不輸出)
8)輸入事件操作:
a.滑動事件:adb shell input swipe x1 y1 x2 y2 可以實現 上滑和下滑等操作
b.鼠標鍵盤相關操作:adb shell終端中存在一個命令input ,adb shell input keyevent keycode的值
其中keycode的值既可以是數字,也可以是對應的keycode的name值
c.文本內容:adb shell input text 字符串 注意:如果模擬器中沒有設置鍵盤得話,則默認只能夠輸入英文,無法輸入中文,后期安裝了appium內置得模擬器輸入法即可輸入中文
d.獲取當前設備得分辨率:adb shell wm size
9)查看設備信息
adb shell getprop 顯示當前模擬器得所有設備信息:系統版本/系統類型/所在區域/手機類型/CPU類型等等
10)專項測試:使用adb命令或者相關得工具進行完成操作:
a.耗電量測試
(1)通過手機自帶的耗電量信息進行分析
(2)通過第三方監控軟件進行獲取相應的電量信息(GT)
GT(隨身調):是APP隨身調測試平台,它可以直接運行在手機上(集成調測環境),可以實現app相關性能數據的收集測試(CPU/內存/流量/電量等)、開發日志、Crash日志、網絡數據包等。GT可以支持IOS和android
注意:IOS的版本是一個framework的包,直接嵌入app工程中、然后再進行編譯出帶有GT的app。
(3)adb shell dumpsys batterystats
b.cpu信息測試
(1)直接使用第三方工具:GT、模擬器自帶的一款工具DDMS
DDMS:它可以實現線程的監控、內存的監控、流量的監控、CPU、模擬器的內置操作等相關的測試。
a)一種是直接在sdk中進行打開ddms
b)集成在eclipse開發軟件中
注意:該工具監控的模擬器必須是先處於debug狀態。
VM heap指標:堆棧指標
如果模擬器或者真實機沒有處於debug狀態的話,那么無法監控,則需要手動設置將其調整為debug狀態
具體操作的步驟:
此時ddms就可以監控到相關的數據信息
(2)直接使用adb命令監控cpu信息:adb shell dumpsys cpuinfo
c.流量測試
(1)通過第三方工具;
(2)針對linux系統存在3個地方會保存流量統計的文件,android操作系統本身就是一個linux。
i.在/proc/net/dev文件中可以進行獲取每個網絡接口的收發流量,實際等價於/sys/class/net該目錄下每個不同的網絡接口的流量單獨存儲在每個文件夾中。
ii.在sys/class/net目錄下可以找到對應的每個接口的流量
iii.在proc/uid_stat會存在對應的app的uid目錄,在該uid目錄下會存在tcp_rcv/tct_snd兩個文件
d.穩定性測試
通過monkey命令完成app的穩定性、健壯性等相關的性能測試。
monkey的原理:使用socket套接字完成一系列偽隨機事件(觸屏、手勢、點擊等)的操作。
說明:socket:是windows的底層通訊協議,基於tcp/udp進行封裝后的協議,也就是我們常說的抽象層。
monkey是不需要額外進行安裝的,直接在模擬器或者真實機中存在的一個jar包,在framework目錄下。
(1)針對於整個模擬器完成隨機事件的測試的話:
adb shell monkey 隨機事件數
(2)只針對某個應用程序現在隨機事件的測試:
adb shell monkey -p 指定app的包名 隨機事件數
注意:可以同時指定多個包名進行執行測試,只需要在隨機事件數前面添加多個-p 包名的參數即可;多個包進行指定運行測試的話,那么是怎么分配事件數的呢?
實現多個包共用指定的事件數,並沒有實現具體分配;
(3)如果實現隨機事件測試過程中遇到崩潰就停止測試的情況的話則可以添加以下參數:
--ignore-crashes:表示的是忽略崩潰,如果程序崩潰得話,則后續事件會繼續運行,不會停止
--ignore-timeouts:表示忽略超時,忽略整個運行過程中事件超時的情況
--ignore-security-exceptions:表示的是忽略網絡證書、數字簽名等可能出現錯誤的情況導致事件失敗
一般如果想要讓所有的事件全部運行的話,通常會把這三個參數全部加上
(4)可以通過參數-v完成日志的信息獲取,最多添加三個-v參數,則表示的是獲取所有的日志信息
--pct-touch PERCENT:表示的觸摸事件,實現屏幕上的按下到抬起的操縱過程
--pct-motion PERCENT:表示的是手勢事件,表示的是在屏幕上實現隨機移動,直線滑動的操作
--pct-trackball PERCENT:表示的是軌跡球事件:表示的是在屏幕上完成的相應的曲線操作
--pct-syskeys PERCENT:表示的是系統按鍵事件:例如:Home鍵、音量加減鍵、返回鍵等
--pct-nav PERCENT:表示的是基本導航事件:這個事件一般應用很少,因為當前手機都是觸屏的,不存在上下左右按鍵
--pct-majornav PERCENT:表示的是主導航事件:指的是鍵盤中的中間鍵,回退鍵,菜單鍵等
--pct-appswitch PERCENT:表示的是app切換事件(activity):啟動activity事件在手機上啟動另一個activity事件
--pct-flip PERCENT:表示的是鍵盤事件:表示的是鍵盤彈起、鍵盤輸入等
--pct-anyevent PERCENT:表示的是任意事件,除了我們指定的其他的10種事件的其他事件。
--pct-pinchzoom PERCENT:表示的是二指縮放事件:兩手指同時按住,移動、抬起等一系列操作的事件
(5)如果需要設定事件與事件之間的間隔時間的話,則可以使用--throttle,其單位是毫秒,一般設定的值可以模擬用戶的操作真實行為(1000ms---1s)
(6)s 參數:表示的是因子參數,因為monkey是隨機事件,如果出現bug了,需要重現的話,那么怎么樣才能夠重復之前執行的事件順序呢?
也就是需要使用到-s參數,其表示seed,用於記錄執行隨機事件的序列。下一次執行的時候添加-s參數則會執行與上一次執行事件順序相同。
注意:如果第一次執行沒有聲明其seed的值的話,那么會隨機生成一個seed值並寫入到日志中。
(7)bugreport參數,需要通過adb bugreport進行獲取bug的報告信息,獲取可以通過包進行篩選