不少同窗通過一段時間的學習以後都明白了Appium的基本原理,可是越學習到後面發現出現的不少陌生名詞沒法弄清楚其具體做用,今天這篇文章的目的就是爲了讓你們來弄懂三個高頻名詞:UiAutomator、UiAutomator二、Bootstrap。java
首先來講下UiAutomator和bootstrap:python
UiAutomator是Android自動化測試框架,是谷歌在Android4.1版本發佈時推出的一款用Java編寫的UI測試框架。其最大的特色就是能夠跨進程操做,咱們可使用UiAutomator框架提供的一些方便的API來對安卓應用進行一系列的自動化測試操做,如點擊、滑動、鍵盤輸入、長按以及經常使用的斷言方法等。能夠替代之前繁瑣的手工測試。android
Bootstrap是Appium在初始化的時候推送到安卓手機上的一個UiAutomator測試腳本,該腳本的惟一一個測試方法所作的事情是在手機端開啓一個SocketServer(通訊模塊),用來監聽Appium從PC端過來的命令發送給UiAutomator來執行處理。git
下圖爲官方提供的原理圖:github
WebDriver script:bootstrap
咱們的測試腳本(java or python)服務器
Appium:app
會首先開啓一個監聽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
如下是其官網的wiki介紹,英文基礎較好的同窗能夠去看看
https://github.com/appium/appium-uiautomator2-server/wiki
確定仍是有比較多同窗對英文犯暈的,那我就給你們翻譯翻譯下:
一、Appium使用UiAutomator2的目的是爲了替換掉以前的UiAutomator+Bootstrap模式
二、Bootstrap是基於UiAutomator V1(即爲UiAutomator)的,可是UiAutomator不少Api基本上官方再也不維護了
三、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安裝到測試設備上
一、appium-uiautomator2-server-vx.x.x.APK
二、appium-uiautomator2-server-debug-androidTest.apk
UiAutomator2 server兩個apk的做用:
一、UiAutomator2 驅動模塊,負責建立會話,安裝UiAutomator2-server.apk到設備上,開啓Netty(這是一個通訊框架,至關於Bootstrap使用的SocketServer升級版本)
二、UiAutomator2服務器模塊,當驅動模塊創初始化完畢,服務器就會監聽PC端Appium發送過來的請求,將請求發送給真正底層的UiAutomator2。