Android 端測試基礎知識分享,附帶 mac 軟體分享

linpengcheng發表於2020-06-09

Android常用測試工具

基礎工具

adb

Android 除錯橋 (adb) 是一種功能多樣的命令列工具,可讓您與裝置進行通訊。adb 命令可用於執行各種裝置操作(例如安裝和除錯應用)。
要在通過 USB 連線的裝置上使用 adb,您必須在裝置的系統設定中啟用 USB 除錯(位於開發者選項下)。
在搭載 Android 4.2 及更高版本的裝置上,“開發者選項”螢幕預設情況下處於隱藏狀態。如需將其顯示出來,請依次轉到設定 > 關於手機,然後點按版本號七次。返回上一螢幕,在底部可以找到開發者選項。
一些基礎的命令示例:

  • 查詢已連線的裝置
adb devices
  • 安裝 &解除安裝APK
adb install [-lrtsdg] <path_to_apk>
adb uninstall [-k] <packagename>
  • 將檔案複製到裝置/從裝置複製檔案
adb pull <remote> <local>
adb push <local> <remote>
  • 發出 shell 命令
adb [-d |-e | -s serial_number] shell <shell_command>

要在裝置上啟動互動式 shell,請使用 shell 命令,如下所示:

adb [-d | -e | -s serial_number] shell

更多關於adb命令的說明:

awesome-adb
adb檢視裝置資訊


部分手機廠商的一些設定項注意點

目前大部分的手機廠商 在adb安裝apk的時候,都會彈出亂七八糟的提示dialog,需要使用者點選才能安裝好app,在進行apk安裝以及後面的UI自動化測試的時候,不同的廠商裝置需要進行一些設定後,才能少躺很多坑。

下面羅列一下各個廠商的裝置的一些設定的建議:

  • 通用設定:開啟開發者模式,在開發者選項中 進行下面的設定

    • 勾選上 USB除錯 (連線USB後啟用除錯模式),勾選一律允許使用這臺計算機進行除錯,避免以後的重複操作
    • 取消勾選 監控ADB安裝應用(使用ABD安裝應用時,需要使用者確認)
    • 取消勾選 連線USB時候,總是是彈出提示
    • 勾選 "僅充電"模式下允許ADB除錯
    • 取消勾選 通過USB驗證應用
    • 建議將 顯示觸控操作 選項勾選上
    • 建議將 不鎖定螢幕 選項勾選上(部分手機在顯示設定中將鎖屏時間設為永不)
  • 小米(部分選項的開啟可能需要 登入MIUI賬號 (需要插入SIM卡))

    • USB安裝 (允許通過USB安裝應用)
    • USB除錯(安全設定) (允許通過USB除錯修改許可權或模擬點選)
    • 啟用MIUI優化 建議關掉,關掉後去許可權設定裡面配置下,安裝應用就不會彈窗了
    • 在系統設定的語言和輸入法中,取消安全鍵盤的選中狀態:
  • oppo

    • 開發者選項的最底部,勾選 禁止監控許可權
    • OPPO部分機型在每次安裝APK時都需要輸入密碼:暫無更靠譜的解決方案,有一個帖子可以供參考 [收集帖] 各廠手機不能自動化的坑和解決方案 。
  • vivo

    • 輸入法設定中,取消安全輸入
    • 部分機型需要 在開發者選項中開啟安全許可權
  • 華為

    • 輸入法設定中,取消安全輸入
    • 部分華為型號的手機,可能出現點選位置與實際位置不符的情況(mate20pro, mate7等),需要在 設定 - 顯示 - 螢幕解析度 中,將解析度設定為最高即可。
  • 三星

    • 顯示-螢幕解析度調到最大(WQHD)
    • 在開發者選項中,開啟未知來源、取消許可權監控。
  • Meizu

    • 開發中選項中 效能優化 - 高階日誌輸出(推薦全部允許)
    • 關閉 手機管家 - Flyme 支付保護

monkey

Monkey 是一個在模擬器或裝置上執行的程式,可生成偽隨機使用者事件(例如點選、輕觸或手勢)流以及很多系統級事件。您可以使用 Monkey 以隨機且可重複的方式對正在開發的應用進行壓力測試。
您可以在每個命令前面加上 adb shell,或者直接進入 shell 並輸入 Monkey 命令。
基本語法如下:

adb shell monkey [options] <event-count>

如果未指定任何選項,Monkey 將以靜默(非詳細)模式啟動,並將事件傳送到目標上安裝的任何(及所有)軟體包。下面是一個更典型的命令列,它會啟動您的應用並向其傳送 500 個偽隨機事件:

adb shell monkey -p your.package.name -v 500

monkey命令列中所有引數的說明:monkey命令選項參考

Maxim 二次開發的monkey

基於遍歷規則的高效能Android Monkey,適用於真機/模擬器的APP UI壓力測試
https://github.com/zhangzhao4444/Maxim


網路測試工具

常用代理工具Charles 、Flidder

對於android端app的測試,許多的資料展示都是通過介面的請求獲取到資料後才能正確給使用者展示相應的內容。
對於介面返回的資料是否正確 ,就需要使用抓包工具來進行抓包測試。
常用的抓包工具有CharlesFliddermitmproxy,下面就針對於Charles進行講解。
Charles是一款代理伺服器,可以擷取請求和請求結果達到分析抓包的目的。針對移動端的app抓包 ,需要對charles進行一些配置。

  • HTTP、HTTPS抓包分析配置
    1. 配置代理,charles抓取移動端的資料,需要將計算機和移動裝置保持在同一個網段(同一個WiFi下)。開啟Proxy -> Proxy Setting,填入代理的埠號(預設8888),勾選上Enable transparent HTTP proxying(如果想要抓取HTTPS的資料,還需要進行下面的配置。
    2. 在Proxy-> SSL Proxying Setting -> SSL proxying,在Include 中點選Add,並在host處填寫 ,同時點選Enable SSL Proxying*,然後點選OK。

3. 在Help-> SSL Proxying -> Install Charles Root Certificate點選後,跳轉到Mac系統鑰匙串訪問,找到名稱含有charles的選項雙擊->點選信任->選擇始終信任

4. 移動端配置證照,先將手機端的wifi連線設定好代理。代理的IP及埠,可以在charles的Help-> SSL Proxying -> Install Charles Root Certificate on a Mobile Devices or Remote Browser檢視。

在手機瀏覽器開啟"chls.pro/ssl",直接安裝即可。
ios的裝置在安裝好之後,需要到設定>通用>描述檔案,將下載好的證照手動安裝後才可以。

注意事項:

- Android 6.0預設使用者級別證照,7.0級以上的需要修改Apk包屬性才能抓取https的包。參見:Charles SSL Certificates

- iOS10.3級以後的手機,需要在 設定>通用 > 關於 > 證照信任設定, 找到名稱包含Charles Proxy的選項 , 將其開啟並始終信任。

  • 使用Charles進行弱網測試

    軟體通常會受網路的影響,比如網路差的時候回出現卡頓甚至異常error的情況。charles自帶弱網工具,可以模擬弱網環境。在 Proxy->Throttle Settings下,使用前需要先勾選上 Enable Throttling。如果想要指定域名下的介面請求進行弱網模擬,可以勾選 Only for selected hosts,然後再對話方塊的下半部分設定hosts項。

    - Throttle Preset:選擇網路型別 例如 56 kbps modem
    - Bandwidth:頻寬
    - Utilistation:利用百分比
    - Round-trip 往返延遲
    - MTU:位元組

  • 使用Charles進行mock資料

    對於返回的資料,又是測試需要模擬各種介面返回的情況,但是返回資料相關的配置還是挺麻煩的,所以Charles提供了資料mock的方法。下面就介紹2種修改返回結果內容的方法。
    方法一: 使用斷點的方式修改

    1. 首選選擇想要mock資料的介面,設定斷點,右鍵點選 Breakpoints

2. 在手機第二次操作,請求該介面的時候,就會自動進入到斷點介面介面。提供一個Edit Requese頁,可提供修改引數以及請求型別、請求連結的校驗。
在請求前,可以修改request的內容:

接著點選Execute進行介面訪問,返回的response選擇JSON Text可以看到斷點連結返回的引數,這個時候就可以改動返回值的結果,以達到想要測試的目的。

再次點選Execute之後,這個修改過的response結果就被app接收到了。用這種點斷修改的方式可以手動修改單次請求的返回結果,達到測試的目的。

注意:
想要開啟/關閉斷點功能,可以在Proxy->Enable Breakpoints &Disable Breakpoints 中進行開啟關閉
對於之前設定了斷點的介面,需要進行修改刪除的,可以在Proxy-> Breakpoints Settings中進行修改

方法二:使用Rewrite功能,直接將介面返回結果重寫
Charles的Rewrite功能非常強大,可以重寫介面所有元素的內容,例如:header、host、url、path、query、param、response status、body。
1. 首先選擇Tools->Rewrite,會彈出下面彈窗,選中Enable Rewrite以及點選左下角的Add:

2. 具體需要重寫的物件,可以在Location下點選Add去新增。具體重寫操作可點選右下側add按鈕進行新增。 當所有都新增完畢,點選OK儲存即可。
Rewrite配置好之後,每次請求對應的介面,都會講重寫修改後的內容返回給終端,和方法一的斷點設定不同的是,不需要每次都手動去修改response的結果。charles會自動修改內容並返回修改後的結果。


Postman

postman是一個強大的介面測試平臺,具有友好的視覺化介面。測試過程中的手動除錯介面,用這個工具就夠了
Charle抓包的介面,可以直接匯入到postman
複製介面的cURL,抓包成功的介面,直接右鍵,點選 Copy cURL Request

在postman裡面,點選import,在彈出的對話方塊內,選擇 Raw Test,然後將複製的cURL張貼進來,點選底部的Continue就行了

其他postman的設定和操作,看完下面的兩個帖子,基本上就都能掌握了:
postman 介面測試--xinxi
Postman 使用小結--小背影


專項工具

Perfdog

Perfdog為騰訊出品的移動全平臺效能測試分析專業工具,支援全平臺的應用形態測試,包括Android、iOS、小遊戲、小程式、H5等。且Android裝置無需ROOT,iOS裝置也無需越獄,能非常高效地解決兩大系統測試分析的難題,提高測試工作的效率。

Appetizer

Appetizer是一個全面的移動測試以及資料分析平臺,資料採集功能在APP執行中收集錯誤、效能、網路資訊,用於除錯、診斷錯誤、評估效能;整合的各種測試工具能夠高效編寫UI自動化指令碼、執行UI壓力測試、自動化Monkey/遍歷介面與功能、一鍵測量APP冷熱首次啟動過程等。 Appetizer是完整的開發生態,開發接入優質第三方工具,從開發到發版形成統一的閉環。

solopi

SoloPi 自動化測試工具是一個無線化、非侵入式的Android自動化工具,公測版擁有錄製回放、效能測試、一機多控三項主要功能,能為測試開發人員節省寶貴時間。

自動化測試

uiautomator

UI Automator是谷歌自家推出的一個介面測試框架,適用於整個系統上以及多個已安裝應用間的跨應用功能介面測試。
UI Automator 測試框架提供了一組 API,用於構建在使用者應用和系統應用上執行互動的介面測試。通過 UI Automator API,您可以執行在測試裝置中開啟“設定”選單或應用啟動器等操作。UI Automator 測試框架非常適合編寫黑盒式自動化測試,此類測試的測試程式碼不依賴於目標應用的內部實現細節。
UI Automator 測試框架的主要功能包括:
- 用於檢查佈局層次結構的檢視器。如需瞭解詳情,請參閱 UI Automator 檢視器
- 用於檢索狀態資訊並在目標裝置上執行操作的 API。如需瞭解詳情,請參閱訪問裝置狀態
- 支援跨應用介面測試的 API。如需瞭解詳情,請參閱 UI Automator API
缺點:

  1. 測試指令碼只能使用Java語言
  2. 測試指令碼要打包成jar或者apk包上傳到裝置上才能執行。

Appium

Appium 是一個開源工具,用於自動化 iOS 手機、 Android 手機和 Windows 桌面平臺上的原生、移動 Web 和混合應用。其跨平臺,多語言的特性,使得其成為目前最為主流的自動化測試框架
原理圖:

openatx-uiautomator2

atx-uiautomator2是一個自動化測試開源工具,僅支援Android平臺的原生應用測試,使用python編寫指令碼。
atx-uiautomator2封裝了谷歌自帶的uiautomator2測試框架,提供便利的python介面。他允許測試人員直接在PC上編寫Python的測試程式碼,操作手機應用,完成自動化,大大提高了自動化程式碼編寫的效率。
原理圖:

AirTest

Airtest是由網易遊戲推出的一款自動化測試框架,基於影像識別的UI自動化測試框架,適用於遊戲和App,支援平臺有Windows、Android和iOS
- 自動化指令碼錄製、一鍵回放、報告檢視,輕而易舉實現自動化測試流程
- 支援基於影像識別的Airtest框架,適用於所有Android和Windows遊戲
- 支援基於UI控制元件搜尋的Poco框架,適用於Unity3d,Cocos2d與Android App

macaca

macaca是面向多端的自動化測試框架,其整體的框架類似Appium
原理圖:

裝置平臺

自建STF 、atx-server2

1. STF(Smartphone Test Farm)

2. atx-server2

原理圖:

第三方雲測平臺

1. 華為遠端真機
需要註冊開發者賬號,貌似每天限制8小時使用,支援apk上傳安裝,日誌獲取,裝置詳情展示

2. 三星真機除錯
需要註冊開發者賬號,支援apk上傳,日誌獲取,遠端adb connect

3. Vivo 遠端真機
需要註冊開發者賬號,每天限時3小時;支援本地上傳apk ,日誌獲取 。除了vivo的裝置外 還有一兩臺華為和pixel的裝置

4. 360開測 真機租用
需要註冊賬號,開幣沒了 可以加qq群申請。各種品牌的裝置都比較全。

5. UC能效 巖鼠 雲真機租用
需要註冊賬號,免費只有30分鐘 ,使用兩次,之後就要氪金了

6. Wetest雲真機
需要註冊賬號,大多數裝置使用需要氪金。

7. Testin 遠端真機
需要註冊,,需要氪金。


Android專項測試

耗電

詳解 Android 耗電量 API
搬運:Battery Historian 2.0
深入淺出 Android App 耗電量統計
安卓耗電測試
通過電池電量評測安卓 App 的耗電水平

效能

Android 效能測試實踐合集
AndroidApp優化之效能測試分析工具閱讀 2059
Android App持續整合效能測試:啟動流量(1)
Android App持續整合效能測試:啟動流量(2)
Android ANR 監測方案解析

安全

初識 APP 安全性測試
使用 apktool 工具對 Android APK 進行反編譯與回編譯
Android 安全專項-Apk 的加固
Android app 安全測試調研及執行
《Android 安全測試初探》合集
移動安全相關貼

相容性

APP 相容性該怎麼測 (1) 概述
Android API 相容性指南


一些軟體分享

scrcpy

https://github.com/Genymobile/scrcpy
android裝置投屏到電腦的一個軟體,賊好用。

MediaInfo(收費)

https://mediaarea.net/en/MediaInfo
MediaInfo是一款自由開源的應用程式,它可以顯示媒體檔案相關的技術資訊,以及許多音訊和視訊檔案的標籤資訊。

licecap

https://www.cockos.com/licecap/
一個gif錄屏的小工具

Clipy

https://github.com/Clipy/Clipy/releases
一次性複製多個內容,然後選擇性的貼上

Go2Shell

https://zipzapmac.com/Go2Shell
可以在Finder中,通過點選一個圖示,快速在當前目錄開啟Terminal。

Dozer

https://github.com/Mortennn/Dozer/releases
一個完全免費的 macOS 選單欄工具,一拖一點就能輕鬆隱藏圖示

相關文章