天天看點

安卓UI自動化工具uiautomator項目實戰前準備工作

作者:地球匆匆的過客

一:環境準備

硬體裝置:windows電腦

軟體:pycharm/藍疊或閃電模拟器/SDK manager

閃電模拟器下載下傳連結:https://www.ldmnq.com/?n=6000&bd_vid=11623493887955105097

二:自動化腳本編寫前需要掌握的基礎

python基礎

  1. 變量
  2. 變量常用的資料類型(字元串/int/dict/list)的聲明和調用,以及資料了類型間的轉換
  3. 函數(帶參函數/不帶參函數/有傳回值/沒有傳回傳回值)的聲明與調用
  4. 開源庫的安裝、調用
  5. 判斷語句與for循環

2. 常用的adb指令

(1)檢視已連接配接的裝置清單:adb devices

(2)開啟或關閉ADB服務:

開啟:adb start-server

結束:adb kill-server

(3)連接配接裝置:adb connect IP 斷開裝置:adb disconnect IP

如果是USB連接配接,直接會連接配接ADB,如果是想通過網絡連接配接(有線或者無線),則需要在同一個區域網路 ,通過裝置的ip位址連接配接即可。

(4) 安裝/解除安裝apk

安裝apk adb install -r apk路徑

常用參數說明:

  • t 允許測試包
  • l 鎖定該應用程式
  • s 把應用程式安裝到sd卡上
  • g 為應用程式授予所有運作時的權限
  • r 替換已存在的應用程式,也就是說強制安裝
  • d 允許進行将見狀,也就是安裝的比手機上帶的版本低

解除安裝apk adb uninstall apk包名

(5)抓取日志 logcat

常用參數說明

"-s"選項 : 隻顯示指定标簽的日志; ------>adb logcat -s SWVDEC 顯示SWVDEC标簽的日志

"-v"選項 : 設定日志的輸出格式;----->adb logcat -v threadtime 檢視日志輸出時間和線程資訊

"-c"選項 : 清空所有的日志緩存資訊;---->adb logcat -c

"-d"選項 : 将緩存的日志輸出到螢幕上, 并且不會阻塞;------->adb logcat -d

"-t"選項 : 輸出最近的幾行日志, 輸出完退出, 不阻塞;------>adb logcat -t 5 輸出日志緩沖區的最近5行

  1. 擷取cpu占用 :top

常用參數說明:

-m num Maximum number of processes to display. 最多顯示多少個程序

-n num Updates to show before exiting. 重新整理次數

-d num Seconds to wait between updates. 重新整理間隔時間(預設5秒)

-s col Column to sort by (cpu,vss,rss,thr). 按哪列排序

-t Show threads instead of processes. 顯示線程資訊而不是程序

  1. 擷取記憶體占用:dumpsys meminfo

擷取指定應用的記憶體 dumpsys meminfo 包名

  1. 擷取應用程序号 ps

(9) 從手機中拉取資訊到本地電腦上 adb pull <手機路徑> <本機路徑>

從本地電腦推送資訊到手機上 adb push <本機路徑> <手機路徑>

(10) 擷取目前運作的Activity

adb shell dumpsys activity | findstr/grep "mFocusedActivity"

(11) adb 截圖指令: screencap 儲存圖檔檔案路徑

(12) adb 錄屏指令: screenrecord 儲存視訊檔案路徑(預設錄制時間和最長錄制時間都是 180 秒)

常用參數說明

--size WIDTH*HEIGHT 視訊的尺寸,如1280*720,預設是螢幕分辨率

--bit-rate RATE 視訊的比特率,預設4Mbps

--time-limit TIME 錄制時長,機關:秒

三:自動化UI腳本編寫流程

安卓UI自動化工具uiautomator項目實戰前準備工作

模拟器配置

  1. 模拟器系統配置

性能設定選項設定為手機版/720*1280,如下圖所示

安卓UI自動化工具uiautomator項目實戰前準備工作

機型設定都一緻選擇MI 9(個别機型可能存在相容性bug,友善統一解決問題),如下圖所示

安卓UI自動化工具uiautomator項目實戰前準備工作

其他設定中開啟ROOT權限和ADB調試,如下圖所示

安卓UI自動化工具uiautomator項目實戰前準備工作

然後“儲存設定”,會提示重新開機系統才會生效,重新開機系統後,在cmd視窗中,輸入:adb devices,顯示如下資訊,證明連接配接成功。

安卓UI自動化工具uiautomator項目實戰前準備工作

然後安裝我們要測試的apk

安裝uiautomator(用來做xpath值擷取的工具)

(1)安裝uiautomator2庫

pip install --pre uiautomator2

pip install pillow (如果需要截圖,可安裝這個庫)

(2)安裝atx-agent

# init就是所有USB連接配接電腦的手機上都安裝uiautomator2

python -m uiautomator2 init

# 指定手機安裝uiautomator2, 用 --mirror

python -m uiautomator2 init --mirror --serial $SERIAL

# 嫌棄慢的話,可以用國内的鏡像

python -m uiautomator2 init --mirror

最後提示success,代表atx-agent初始化成功。

(3)安裝Weditor

pip install -U weditor

安裝好之後,就可以在指令行運作 weditor --help 确認是否安裝成功了。

Windows系統可以使用指令(weditor --shortcut)在桌面建立一個快捷方式,

如下圖所示:

安卓UI自動化工具uiautomator項目實戰前準備工作

啟動weditor的方式

方法1.指令行直接輸入 weditor 會自動打開浏覽器,輸入裝置的ip或者序列号,點選Connect即可;

方法2.桌面上輕按兩下WEditor快捷方式即可;

方法3.指令行中執行 python -m weditor

uiautomator常用API

參考教程https://vic.kim/2019/05/20/UIAutomator2%E7%9A%84%E4%BD%BF%E7%94%A8/

截至這裡,各種環境已經安裝完畢!

需求/用例熟悉

我們看2條注冊子產品的用例:

用例編号 子產品 預置條件 操作步驟 期望結果 測試結果
1 注冊 網絡正常
  1. 輸入正确的賬号和密碼
  2. 點選注冊
2.彈出toast,提示注冊成功,跳轉到登入頁面
2 注冊 網絡正常

1.輸入已經注冊過的賬号和密碼

2.點選注冊

2.彈出賬号已經注冊的toast提示

拆解操作步驟,結果判斷等

操作步驟:打開app,點選注冊按鈕,然後定位到賬号和密碼文本框分别做出對應的操作

判斷:注冊成功後,彈出注冊成功後,會跳轉到登入頁面,重複注冊隻是給出toast提示

以上是操作步驟和預期結果,在實際工作中,我們還需要在問題出現的時候,截屏或錄屏并給開發抓取log,最好還要給出執行用例的時間。

操作步驟如下

安卓UI自動化工具uiautomator項目實戰前準備工作

然後我們用代碼實作如下圖:

import os
import time

import uiautomator2 as us
#導入uiautomator2庫 as是取個别名叫us
#通過連接配接執行個體化拿到裝置類
driver=us.connect_usb()
#通過包名啟動app
#錄制螢幕
os.system("start adb shell screenrecord  --time-limit 60 /sdcard/test2.mp4 ")
driver.app_start('com.example.wenhaotest')#引号内為包名稱
time.sleep(5)
#通過xpath定位到注冊按鈕并點選
#driver.xpath('//*[@resource-id="com.example.wenhaotest:id/btn1"]').click()
driver.xpath('//*[@resource-id="com.example.wenhaotest:id/btn2"]').click()
time.sleep(5)
#當注冊頁面的某個xpath出現後,我們通過xpath定位到賬号和密碼并輸入對應的内容,然後點選注冊按鈕
if driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_button"]').exists:
    #通過xpath定位到賬号輸入内容
    driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_user"]').set_text("1kobe_brant2")
    #通過xpath定位到密碼輸入内容
    driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_mm"]').set_text("8888888888")
    #通過xpath定位到注冊按鈕并點選
    driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_button"]').click()
    #硬等待
    #通過登入頁面唯一xpath值定位,确認是否跳轉,如登入頁面有登入按鈕
    #通過對應函數擷取app彈出的toast内容
    textContent=driver.toast.get_message()
    print(textContent)
    # 硬等待
    time.sleep(5)
    if(driver.xpath('//*[@resource-id="com.example.wenhaotest:id/btn1"]').exists and str(textContent) == "注冊成功"):
        print("pass")
        # 抓取日志
        os.system('adb  logcat -t 100000 >> "C:\\Users\\LENOVO\\Desktop\\test1.log" ')
    else:
        print("failed")
        #抓取日志
        os.system('adb  logcat -t 100000 >> "C:\\Users\\LENOVO\\Desktop\\test1.log" ')





           

繼續閱讀