1. 程式人生 > >Python-UiAutomator2實現Android自動化測試

Python-UiAutomator2實現Android自動化測試

本帖轉自搜狗測試公眾號

 

【一、前言】

       基於Python-UiAutomator2實現Android自動化測試,小編在Android應用的自動化效能測試中進行了實踐。本篇將簡單介紹python中使用adb、aapt命令的方法以及Python-UiAutomator2使用,後續文章將對環境搭建以及自動化效能測試進行介紹,希望能給大家一些微薄的幫助。

【二、python中使用adb、aapt命令】

在python中使用adb命令,可以匯入os模組

1、簡單的adb命令

如:os.system('adb devices)

2、稍微複雜的adb命令

如:os.system('adb shell "dumpsys activity | grep "com.sogou.map.android.***.*""')

3、將adb讀出的內容儲存(os.system不支援讀取,os.popen支援讀取)

如:out = os.popen('adb shell "dumpsys activity | grep 

"com.sogou.map.android.***.*""').read()

 

 

在python中使用aapt命令

aapt即Android Asset Packaging Tool,可以在Android SDK的platform-tools目錄下找到該工具。aapt可以檢視、建立、更新ZIP格式的文件,也可將資原始檔編譯成二進位制檔案。

1、 列出apk包的內容

aapt l[ist] [-v] [-a]file.{zip,jar,apk}

-v 以table形式列出來

-a 詳細列出內容

2、 檢視apk一些資訊

aapt d[ump] [--values]WHAT file.{apk} [asset [asset ...]]

badging  Print the label and icon for the app declaredin APK

permissions  Print the permissions from the APK.

Resources  Print the resource table from the APK.

Configurations  Print the configurations in the APK.

Xmltree  Print the compiled xmls in the given assets.

Xmlstrings  Print the strings of the given compiled xmlassets.

例如:執行aapt d badging **.apk,可以看到其中包含了應用包名、版本號、permission等資訊。

 

 

 

 

【三、Python-UiAutomator2使用】

1、UiAutomator

UiAutomator是google為Android平臺開發的自動化測試框架,基本上支援所有的Android事件操作,主要是針對UI的自動化測試,支援Android 4.1以及更高的版本。

UiAutomator提供了以下兩種工具來支援UI自動化測試:

(1). uiautomatorviewer:用來分析UI控制元件的圖形介面工具,位於SDK目錄下的tools資料夾中。

(2). uiautomator:一個java庫,提供執行自動化測試的各種API。

是否能夠用更指令碼化的語言,例如Python,可以所見即所得地修改測試、執行測試?

非常感謝Xiaocong實現並分享(詳見參考2),為Python和UiAutomator架了一座橋。

2、Python-UiAutomator2

python-uiautomator2是一個Android UI自動化框架,支援Python編寫測試指令碼對裝置進行自動化。底層基於Google uiautomator2,允許測試人員直接在PC上編寫Python的測試程式碼,操作手機應用,完成自動化,提高自動化程式碼編寫的效率。原理是在手機上運行了一個http伺服器,將uiautomator中的功能開放出來,再將這些http介面,封裝成Python庫。

支援平臺及語言

 

python-uiautomator2主要分為兩個部分,python客戶端,移動裝置

  • python端:執行指令碼,並向移動裝置傳送HTTP請求

  • 移動裝置:移動裝置上運行了封裝了uiautomator2的HTTP服務,解析收到的請求,並轉化成uiautomator2的程式碼。

 

整個過程

(1).   在移動裝置上安裝atx-agent(守護程序),隨後atx-agent啟動uiautomator2服務(預設7912埠)進行監聽;

(2).   在PC上編寫測試指令碼並執行(相當於傳送HTTP請求到移動裝置的server端);

(3).   移動裝置通過WIFI或USB接收到PC上發來的HTTP請求,執行制定的操作。

python-uiautomator2程式碼示例

 

上面程式碼的作用是啟動“搜狗地圖”應用,然後點選“身邊tab”,程式碼簡潔、高效。

 

3、python-uiautomator2常用API介紹

3.1 獲取機器的資訊

d.info

d.window_size()

d.current_app()

d.serial  #獲取裝置序列號

d.wlan_ip  #獲取無線區域網ip

 

3.2 螢幕相關的操作

開關螢幕,程式碼如下

d.screen_off()  #開啟螢幕

d.screen_on()  #關閉螢幕

d.unlock()  #解鎖螢幕

3.3 按鍵(軟/硬)操作

d.press('back')

d.press('home')

還支援如下按鍵的操作,

home、back、left、right、up、down、center、menu、search、enter、recent(recent apps)、volume_up、volume_down、volume_mute、camera、power

3.4 手勢相關的操作,包括短按/長按/滑動/拖拽

點選操作

d.click(x, y)

雙擊操作

d.double_click(x,y)

長按操作

d.long_click(x, y)

滑動操作

d.swipe(sx, sy, ex, ey)

d.swipe(sx, sy, ex, ey, steps=10)

拖拽操作

d.drag(sx, sy, ex, ey)

3.5 螢幕相關的操作

獲取並設定螢幕的旋轉方向

orientation = d.orientation

d.set_orientation("l") # or "left"

d.set_orientation("r") # or "right"

d.set_orientation("n") # or "natural"

凍結/解凍旋轉功能

d.freeze_rotation()  # 凍結旋轉

d.freeze_rotation(False)  # 解凍旋轉

螢幕截圖

d.screenshot("home.png")

獲取螢幕層級(hierachy)XML

xml = d.dump_hierarchy()

開啟通知欄或快速設定欄

d.open_notification()

d.open_quick_settings()

【四、參考文獻】

參考

https://github.com/openatx/uiautomator2

https://github.com/xiaocong/uiautomator#uiautomator

https://blog.csdn.net/jgw2008/article/details/78286469

https://testerhome.com/topics/11357