兩分鍾搞懂UiAutomator、UiAutomator2、Bootstrap的關系


很多同學經過一段時間的學習之后都明白了Appium的基本原理,但是越學習到后面發現出現的很多陌生名詞無法弄清楚其具體作用,今天這篇文章的目的就是為了讓大家來弄懂三個高頻名詞:UiAutomator、UiAutomator2、Bootstrap。

首先來說下UiAutomator和bootstrap:

  UiAutomator是Android自動化測試框架,是谷歌在Android4.1版本發布時推出的一款用Java編寫的UI測試框架。其最大的特點就是可以跨進程操作,我們可以使用UiAutomator框架提供的一些方便的API來對安卓應用進行一系列的自動化測試操作,如點擊、滑動、鍵盤輸入、長按以及常用的斷言方法等。可以替代以前繁瑣的手工測試。

  Bootstrap是Appium在初始化的時候推送到安卓手機上的一個UiAutomator測試腳本,該腳本的唯一一個測試方法所做的事情是在手機端開啟一個SocketServer(通信模塊),用來監聽Appium從PC端過來的命令發送給UiAutomator來執行處理。

  下圖為官方提供的原理圖:

WebDriver script:

  我們的測試腳本(java or python)

Appium:

  會首先開啟一個監聽4723端口的server,接收測試腳本發送過來的對應請求,再講對應的請求發送給中間件Bootstrap.jar(注意這里的請求不是整個腳本文件,而是對應的命令請求,比如:點擊一個元素就是一條請求)

Bootstrap.jar:

  監聽4724端口由appium發送過來的相關請求,並且將請求轉換成UiAutomator可以識別的命令發給UiAutomator進行處理

 

UiAutomator2:

說到這里相信大家已經了解了這兩者的關系,那為什么還會有UiAutomator2,難道是UiAutomator的升級版本?沒錯!

appium在最近有加入了對UiAutomator2(也可稱為UiAutomator V2)的支持實現Android端自動化,原理同之前的UiAutomator+Bootstrap有很大的不同:

為了能夠支持UiAutomator2,Appium引入了appium-uiautomator2-server(類似driver與Selenium關系)

以下是其官網的wiki介紹,英文基礎較好的同學可以去看看

https://github.com/appium/appium-uiautomator2-server/wiki

肯定還是有比較多同學對英文犯暈的,那我就給大家翻譯翻譯下:

1、Appium使用UiAutomator2的目的是為了替換掉之前的UiAutomator+Bootstrap模式

2、Bootstrap是基於UiAutomator V1(即為UiAutomator)的,但是UiAutomator很多Api基本上官方不再維護了

3、UiAutomator V2修復了UiAutomator V1中遇到的大多數問題,最重要的是實現了與Android系統更新的分離

有看到我們公開課的同學或者VIP課程的同學比較清楚:在獲取到toast信息的時候需要將automationName設置成UiAutomator2,就是因為在UiAutomator2上新增了AccessibilityService服務,可以實現Toast的獲取。

以下是其使用原理圖:

WebDriver script:

  不用多說,就是我們的執行腳本

Appium:

  客戶端傳遞desired capabilities屬性配置給Appium Server來創建一個會話,Appium Server會調用appium-uiautomator2-driver,同時將UiAutomator2 server的兩個apk安裝到測試設備上

  1、appium-uiautomator2-server-vx.x.x.APK

  2、appium-uiautomator2-server-debug-androidTest.apk

UiAutomator2 server兩個apk的作用:

  1、UiAutomator2 驅動模塊,負責創建會話,安裝UiAutomator2-server.apk到設備上,開啟Netty(這是一個通信框架,相當於Bootstrap使用的SocketServer升級版本)

  2、UiAutomator2服務器模塊,當驅動模塊創初始化完畢,服務器就會監聽PC端Appium發送過來的請求,將請求發送給真正底層的UiAutomator2。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM