『與善仁』Appium基礎 — 14、Appium測試環境搭建

繁華似錦Fighting 發表於 2021-11-28
appium

1、Appium測試環境搭建整體思路

(1)Android測試環境搭建

Android測試環境需要搭建三個環境,JavaAndroidSDKAndroid模擬器
為什麼要安裝這三個環境?

  • Java:Android的應用程式層使用的語言是Java,所以需要使用Java環境。
  • AndroidSDK:Android SDK給你提供開發、測試所必須的Android API類庫
  • Android模擬器:實際上就是一臺手機,方便我們給大家展示效果。

(2)Appium測試環境搭建

Appium測試環境需要搭建:

  • Appium Server
    是Appium的核心,提供了一組REST API的Web伺服器。
    Appium收到客戶端的連線、監控命令,之後在移動裝置上執行這些命令,最後把執行結果放在HTTP響應中返回給客戶端。
    可以通過Node.js安裝,也可以通過Appium Desktop啟動Appium Server服務。
  • Appium Clients
    Appium官方提供了一套Appium client,涵蓋多種語言Ruby/Java/Python等,
    在測試的時候,一般要使用這些client庫去替換原生的webdriver庫。
    讓我們可以更方便的寫出可讀性更好的測試用例。
  • Devices
    就是我們的移動裝置,可以是真實的手機,或者是電腦上的Android模擬器。
    (Android模擬器我們在上一步就完成了)

(3)測試指令碼語言的環境搭建

例如:Pyhton、Java等開發環境。

要使用Pyhton語言寫我們的測試指令碼,就搭建Python語言的開發環境,包括開發工具。

要使用Java語言寫我們的測試指令碼,就搭建Java語言的開發環境,包括開發工具。

2、Appium在Android端和IOS端的工作流程

(1)Android端

在Android端,Appium基於WebDriver協議,利用Bootstrap.jar,最後通過調⽤用UiAutomator的命令,實現App的自動化測試。

UiAutomator測試框架是Android SDK自帶的App UI自動化測試Java庫。

另外由於UiAutomator對H5的支援有限,Appium引入了chromedriver以及safaridriver等來實現基於H5的自動化。

Appium 在Android端工作流:

  1. client端也就是我們test script(webdriver測試指令碼)。
  2. 中間是起動的Appium的服務,Appium在服務端起了一個Server(4723埠),跟Selenium Webdriver測試框架類似, Appium支援標準的WebDriver JSON Wire Protocol
    在這裡提供它提供了一套REST的介面,Appium Server接收webdriver client標準rest請求,解析請求內容,呼叫對應的框架響應操作。
  3. Appium Server會把請求轉發給中介軟體Bootstrap.jar ,它是用Java寫的,安裝在手機上的Bootstrap監聽4724埠並接收Appium的命令,最終通過調⽤用UiAutomator的命令來實現。
  4. 最後Bootstrap將執行的結果返回給Appium Server。
  5. Appium Server再將結果返回給Appium Client。

(2)iOS端

在iOS端,Appium同樣使用WebDriver的一套協議。

與Android端測試框架不同的是,Appium iOS封裝了Apple的Instruments框架,主要用了Instrument裡的UI Automation(Apple的自動化測試框架),然後在裝置中注入bootstrap.js進行監聽。

Appium 在iOS端工作流:

  1. Client端 依然是test script(webdriver測試指令碼)。
  2. 中間是起動的是Appium的服務,Appium在服務端起了一個Server(4723埠),跟Selenium Webdriver測試框架類似,Appium支援標準的WebDriver JSON Wire Protocol
    在這裡提供它提供了一套REST的介面,Appium Server接收webdriver client標準rest請求,解析請求內容,呼叫對應的框架響應操作。
  3. Appium Server呼叫instruments.js啟動⼀一個socket server,同時分出一個子程式執行instruments.app,將bootstrap.js(一個UIAutomation指令碼)注入到device用於和外界進行互動
  4. 最後Bootstrap.js將執行的結果返回給Appium Server
  5. Appium Server再將結果返回給 Appium Client。

(3)總結

所以我們可以看到Android與iOS區別在於Appium將請求轉發到bootstrap.js或者bootstrap.jar

然後由bootstrap驅動UIAutomationUiAutomator去Devices上完成具體的動作。

如下圖所示:

image

3、ADB執行原理和Appium執行原理

(1)ADB原理

ADB原理簡易模型圖 (跟著12345步驟走),如下圖所示:

image

(2)ADB實際操作原理參考圖

如下圖所示:

image

(3)Appium原理

Appium簡易原理圖(跟著序號12345678走),如下圖所示:

image

(4)Appium原理實際參考圖( 結合簡易原理圖 )

如下圖所示:

image

參考: