Android 自動化測試及性能數據採集的 Python 腳本

寫在前面

本文主要介紹一個基於 uiautomator2 封裝的一個 Pythonandroid-catcher,該庫的功能主要有對 Android 設備進行 UI 自動化測試採集手機性能數據,適用於如列表滑動、錄製視頻等各類測試場景下 CPU、內存、幀率等信息的捕獲,方便後續分析。 Github地址:https://github.com/CharmingW/android-catcherpython

安裝

安裝 Python

自動化測試的腳本是用 Python 3 寫的,要運行腳本須要先安裝 Python 3 環境
下載地址: Python 3.6.5android

安裝 android-catcher 依賴

打開腳本目錄執行如下命令,安裝依賴git

pip install -r requirements.txt
複製代碼

Usage

uiautomator2 的使用方式

安裝完 uiautomator2 以後,通常只須要執行如下命令對設備進行初始化,在設備上安裝 uiautomator2 服務github

python -m uiautomator2 init
複製代碼

出現如下提示則表示安裝成功
bash

uiautomator初始化成功

更多的 uiautomator2 的使用方式可參考:https://github.com/openatx/uiautomator2

腳本文件說明

這個腳本庫根目錄下主要的文件有網絡

  • info.py:手機性能信息採集的腳本,其中定義了父類 Info,已實現的子類有 CPUInfo(CPU信息)、MemInfo(內存信息)、FPSInfo(幀率信息)、NetInfo(網絡流量信息),使用者能夠從 Info 派生子類來實現本身的採集需求
  • task.py:測試場景的腳本,其中定義了父類 Task,由於沒有固定的測試場景,所以使用者須要從 Task 派生子類並重寫 Task#execute 方法來自定義的測試場景,自定義方式可參考:https://github.com/openatx/uiautomator2
  • info_task.py:測試場景和採集信息靈活結合的腳本,使用者不須要用到
  • utils.py:工具方法腳本
  • _main_.py:任務運行的入口腳本,當沒有具體的測試場景,只是想採集指定時間段的信息,直接運行該腳本

參數說明

  • -s:必選參數,指定設備號,可經過 adb devices 獲取
  • -a:必選參數,要測試進程的 applicationId
  • -f:可選參數,採樣間隔,單位爲秒,不建議設置過短,最好是大於 0.1s,默認是 1s
  • -d:可選參數,採樣持續時間,默認爲10s
  • -i:可選參數,須要採集的信息,能夠設置多個,目前可選的有四個,分別爲 cpu、mem、fps、net,用 "," 隔開,如 -i cpu,mem,fps,net
  • -o:可選參數,採集到的信息的輸出目錄,如 "." 表示當前腳本所在的目錄,默認爲 "."

生成文件說明

採集到的信息根據信息類型分別存放在指定輸出目錄的 cpu_stats、mem_stats、fps_stats、net_stats 四個子目錄下,文件名爲 信息類型_設備號_applicationId_版本號_測試場景名_時間戳,如 cpu_d3c2edaa_video.like_RecordVideo_1.9.9_1524122928.csv.csv,實際效果大體以下圖 app

image

輸出文件爲 csv 文件,直接打開和用 Excel 打開的效果分別以下圖
dom

image

image
另外能夠爲測試的每一個階段添加一個節點說明

task.period = "idle"
複製代碼

生成相似以下的圖 ide

image

無自定義測試場景的使用方式

適用於沒有具體測試場景,在腳本運行以後一段時間內都處於採集狀態的狀況,持續時間能夠經過配置參數指定,過程當中使用者能夠隨意操做手機。經過命令行直接運行 _main_.py 腳本文件,並指定相關參數 比方說我要採集 applicationId 爲 video.like 這個應用 10s 內的 cpu 信息和內存信息,採樣間隔爲 200ms,輸出目錄爲當前目錄,那麼能夠在腳本所在的目錄執行如下命令工具

python _main_.py -s 設備號-a video.like -f 0.2 -d 10 -i mem,cpu -o .
複製代碼

腳本運行結束以後能夠在根目錄下看到以下圖所示的文件生成

image

注:要帶 -d 參數,指定採集的持續時間,不然腳本默認運行 10s,而且無需 -t 參數,默認測試場景名爲 Random

自定義測試場景的使用方式

自定義測試場景不能直接調用 _main_.py 腳本,須要建立新的腳本,繼承 task.py#Task 並重寫 Task#execute 方法,在 Task#execute 中實現自定義測試場景的邏輯,以下圖所示:

image

這裏建立了名爲 start_app.py 的腳本,運行命令:

python start_app.py -s 設備號-a 進程名 -f 0.1 -i cpu,mem -o .
複製代碼

就能夠啓動對應的 APP,並採集 CPU 信息和內存信息,採樣間隔爲 100ms,輸出到當前目錄。注意這裏沒有了 -d 參數,由於採集的持續時間以測試任務的持續時間的持續時間爲準,設置的參數必定要按照說明來,不然不能採集到數據 若是想採集自定義的信息,能夠繼承 info.py#Info 並重寫 Info#get_start_infoInfo#get_end_info 方法,可參考已實現的四種信息採集的寫法,最後經過 Task#add_info 方法添加。

自定義好測試場景以後,調用 _main_#main 方法,傳入測試場景實例,測試場景的名稱會做爲輸出文件命名的一部分,這裏最好取能準確表達測試場景的名稱,如某個 APP 錄製視頻測試場景的名稱爲 RecordVideo 採集到的信息可經過 Excel 製成圖表,如下是完整錄製視頻這個測試場景的 CPU 佔比和內存的變化

image
image
經過圖表能夠直觀分析應用不一樣版本和不一樣場景下的性能情況

寫在最後

以上就是該庫的一些使用介紹。因爲工做經驗尚淺,Python 也是現學現用,在寫這個庫時,可能會有許多考慮不周或不完善的地方,有能力的小夥伴能夠直接修改該庫,以實現更多自定義功能,另外也但願你們能多用,多發現問題,歡迎 issue,歡迎 star,有新的使用需求和想法也歡迎提出,後續會不斷完善,感謝!
Github地址:github.com/CharmingW/a…

相關文章
相關標籤/搜索