『與善仁』Appium基礎 — 10、Appium基本原理

繁華似錦Fighting發表於2021-11-25

1、Appium自動化測試架構

Appium是一個C/S架構的自動化測試框架,Appium的核心其實是一個暴露了一系列REST API的Server(服務)。(也就是Appium的核心是一個提供了一組REST API的Web伺服器。)

這個Server的功能其實很簡單:監聽一個埠,然後接收由client(客戶端)傳送來的command(命令)。翻譯這些command,把這些command轉成移動裝置可以理解的形式傳送給移動裝置,然後移動裝置執行完這些command後,把執行結果返回給Appium ServerAppium Server再把執行結果返回給client

在這裡client其實就是發起command的裝置,一般來說就是我們程式碼執行的機器,執行Appium測試程式碼的機器。狹義點理解,可以把client理解成是程式碼,這些程式碼可以是java/ruby/python/js等編寫的,只要它實現了WebDriver標準協議就可以。

這樣的設計思想帶來了一些好處:

  1. 可以帶來多語言的支援;
  2. 可以把Server放在任意機器上,哪怕是雲伺服器都可以;(Appium和WebDriver天生適合雲測試)

2、Appium架構圖

如下圖所示:

image

3、Session說明

  • session就是一個會話,在WebDriver/Appium,你的所有工作永遠都是在session start後才可以進行的。
  • 一般來說,通過POST /session這個URL,然後傳入Desired Capabilities(一個JSON物件)就可以開啟session了。
  • 開啟session後,會返回一個全域性唯一的session id,以後幾乎所有的請求都必須帶上這個session id,因為這個seesion id代表了你所開啟的瀏覽器或者是移動裝置的模擬器。
  • 進一步思考一下,由於session id是全域性唯一,那麼在同一臺機器上啟動多個session就變成了可能,這也就是selenium gird所依賴的具體理論根據。

4、Desired Capabilities說明

Desired capabilities是傳送到Appium服務端的一組鍵和值(即對映或雜湊),其中攜帶了一些配置資訊。

從本質上講,這個東西是key-value形式的物件。你可以理解成是Java裡的Map,Python裡的字典,Ruby裡的hash以及JS裡的json物件。實際上Desired Capabilities在傳輸時就是json物件。

Desired Capabilities最重要的作用是告訴Appium Server本次測試的上下文。

  • 這次是要進行瀏覽器測試還是移動端測試?
  • 如果是移動端測試的話是測試Aandroid還是iOS?
  • 如果測試Aandroid的話那麼我們要測試哪個APP?

Appium server的這些疑問Desired Capabilities都必須給予解答,否則Appium Server不買賬,自然就無法完成移動APP或者是瀏覽器的啟動。

具體說明如下:

For example, we might set the platformName capability to iOS to tell Appium that we want an iOS session, rather than an Android one. Or we might set the safariAllowPopupscapability to true in order to ensure that, during a Safari automation session, we’re allowed to use JavaScript to open up new windows. See the capabilities doc for the complete list of capabilities available for Appium

翻譯如下:

例如,我們可以將platformName功能設定為iOS,以告知Appium我們想要一個iOS會話,而不是Android會話。 或者,我們可以將safariAllowPopupscapability設定為true,以確保在Safari自動化會話期間,允許我們使用JavaScript開啟新視窗。 請參閱功能文件以獲取可用於Appium的功能的完整列表。

5、Appium Server說明

這就是每次我們在命令列用Appium命令開啟的東西。

Appium server是用Node.js寫的。我們可以用原始碼編譯或者從NPM直接安裝。

安裝方式

$ npm install -g Appium
$ Appium

說明:

  • Appium服務端有很多語言庫JavaRubyPythonPHPJavaScriptC#,這些庫都實現了 Appium對WebDriver協議的擴充套件。
  • 當使用Appium的時候,你只需使用這些庫代替常規的WebDriver庫就可以了。

提示:我們不推薦使用這種方式進行安裝Appium,推薦使用下面Appium Desktop的方式進行安裝。

6、Appium Clients說明

由於原生的webdriver api是為web端設計的,因此在移動端用起來會有點不倫不類。Appium官方提供了一套Appium client,涵蓋多種語言ruby/java/python等,在我看來ruby client是實現最好的。

在測試的時候,一般要使用這些client庫去替換原生的WebDriver庫。

這實際上不是替換,算是client對原生WebDriver進行了一些移動端的擴充套件,加入了一些方便的方法,Appium client讓我們可以更方便的寫出可讀性更好的測試用例。

Appium的客戶端庫下載地址:http://Appium.io/downloads.html

7、Appium Desktop說明

Appium Desktop是在Appium Server上封裝成一個有圖形介面的服務端,可以在任何平臺下載安裝。

它與執行Appium Server所需的所有內容捆綁在一起,因此不需要擔心Node環境。

它還附帶了一個檢查器,用來檢視應用程式的層次結構等。在編寫測試時,這會派上用場。

image

參考:https://www.cnblogs.com/sophia194910/p/7515165.html

相關文章