Appium是一個可用於測試iOS、 Android操作系統和Windows桌面平台原生應用,移動網頁應用和混合應用的自動化測試框架。
-
原生應用(Native App):用 android、iOS或者Windows SDK編寫的應用
-
移動網頁應用(Web App):通過手機瀏覽器訪問的網頁應用,比如iOS中 safari應用,Android上的Chrome應用或者內置瀏覽器應用,不會占用手機的存儲空間。
-
混合應用(Hybrid App):同時具備Native App和Web App的特性,一種 webview應用,將Javascript,HTML和CSS執行在embedded webview中,外層用Native App wrapper包起來。
Appium 跨語言支持:Java、 Python、 Ruby、JavaScript (Node.js)、PHP、C# (.NET)、RobotFramework等,Appium是跨平台的,可以用在OSX,Windows以及Linux桌面系統上運行。
Appium架構
WebDriver
Selenium Webdriver API實現腳本語言與瀏覽器之間的通信,是一個遠程控制接口,可參考Selenium Webdriver 架構。 Webdriver定義的JSON Wire Protocol(JSON有線協議)實現selenium客戶端與remote server(瀏覽器驅動的HTTP服務器)的交互,remote server將命令發送給瀏覽器,實現瀏覽器的native調用。
WebDriver協議可參考官方文檔:https://w3c.github.io/webdriver/
Appium WebDriver對Selenium Webdriver協議進行了擴展(Mobile JSON Wire Protocol),Appium 客戶端通過Webdriver協議與Appium Server進行交互。
Appium引擎列表
為了不重新編譯或修改應用,Appium 使用系統自帶的自動化框架:
Android 4.3+
- UIAutomator
- UIAutomator2[推薦]
iOS
- UIAutomation (iOS ≤ 9.3)
- XCUITest[推薦] (iOS ≥ 9.3)
Windows:
- WinAppDriver
Appium的設計理念
Client/Server設計模式
Appium采用 C/S架構,Appium與客戶端建立連接並監聽命令,然后在移動設備上執行這些命令,命令執行結果通過 HTTP 響應的方式返回。客戶端通過 WebDriver json wire協議與服務端通訊。由於Appium的這種特性,我們可以將Appium server放在與測試機不同的機器上。Appium Server是使用 Node.js 編寫的HTTP服務。
session 會話
Appium自動化執行時會首先拉起一個session會話,客戶端和服務器之間初始化一個session,通過發送一個POST /session
建立連接,客戶端的post請求中攜帶一個稱為 'desired capabilities‘ 的JSON對象,定義設備平台(iOS或Android)、版本、server地址等請求字段,后面的文章將詳細介紹。服務器接收到請求后會建立一個session並回應一個session ID,建立好連接后就可以發送命令了。
Appium Clients
Appium支持多語言,包括Java, Ruby, Python, PHP, JavaScript, 和 C#,這些客戶端庫支持WebDriver 協議擴展。
語言/框架 | Github倉庫地址 |
---|---|
Ruby | https://github.com/appium/ruby_lib, https://github.com/appium/ruby_lib_core |
Python | https://github.com/appium/python-client |
Java | https://github.com/appium/java-client |
JavaScript (Node.js) | https://github.com/admc/wd |
JavaScript (Node.js) | https://github.com/webdriverio/webdriverio |
JavaScript (Browser) | https://github.com/projectxyzio/web2driver |
Objective C | https://github.com/appium/selenium-objective-c |
PHP | https://github.com/appium/php-client |
C# (.NET) | https://github.com/appium/appium-dotnet-driver |
RobotFramework | https://github.com/serhatbolsu/robotframework-appiumlibrary |
Appium工作原理
- 首先開啟Appium server,它會默認監聽4723端口
- appium客戶端(測試腳本)基於Json wire protocol發送設備信息給Appium server,請求創建session。其中設備信息放在desired capabilities中,包括系統平台,版本,應用等信息(詳細介紹參考App控件定位)。session用於保存設備配置信息。
- Appium server創建session id並返回給client:appium server調用AndroidDriver為client生成一個session並且生成一個與此session相關聯的session id,作為client與server之間通信的唯一標識。
- 開啟bootstrap socket服務器:Appium在初始化時將中間件Bootstrap.jar推送到設備,bootstrap是uiautomator的測試腳本,繼承於UiautomatorTestCase。手機端通過該腳本監聽端口4724,appium server作為socket-client端通過4724端口將請求發送給socket服務器(bootstrap.jar),然后bootstrap將appium命令轉換成uiautomator命令。
連接建立完成后,Appium client基於Json wire protocol通過4723端口將指令發送給Appium server,Appium server(socket-client)通過4724端口轉發給中間件bootstrap.jar(socket-server),bootstrap.jar將請求轉換成UiAutomator可以識別的命令,發給UiAutomator對設備進行操作。執行完操作后將執行的結果返回給Appium server,Appium server返回給Appium客戶端,客戶端對結果做校驗。
Appium生態工具
-
adb:android的控制工具,用於獲取 android的各種數據和控制
-
Appium Desktop:內嵌了 appium server和inspector的綜合工具
-
Appium Server:appium的核心工具,命令行工具
-
Appium client:各種語言的客戶端封裝庫,用於連接 appium server
-
AppCrawler:自動遍歷工具
appium使用 appium-xcuitest-driver來測試iPhone設備,其中需要安裝 facebook開發的WDA(webdriver agent)來驅動iOS測試,下面介紹Android APP測試環境安裝。
Appium環境安裝
- Java1.8版本
- Android sdk
- Node.js(>=10 版本),npm(>=6 版本)
- Python3
- Appium-desktop
- Appium python client
1、安裝Node.js
- Node.js 是一個基於 Chrome V8 引擎的 JavaScript 運行環境
- Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。
- 是運行在服務端的 JavaScript
https://nodejs.org/en/download/
命令行窗口中運行node -v
查看是否安裝成功
2、安裝jdk
jdk下載下載地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
按照默認路徑安裝
配置環境變量
“我的電腦”右鍵菜單--->屬性--->高級--->環境變量--->系統變量-->新建
- 變量名:JAVA_HOME
變量值:C:\Program Files (x86)\Java\jdk1.8.0_144 - 變量名:CALSS_PATH
變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
找到path變量名—>“編輯”添加:
- 變量名:PATH
變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
查看是否安裝成功:java -version
3. 安裝Android SDK
Android SDK是Google提供的Android開發工具包,在開發Android應用的時候會用到,需要通過引入工具包來調用Android的API
下載地址:https://developer.android.com/
中文社區的SDK下載地址:
http://tools.android-studio.org/index.php/sdk
雙擊打開SDK Manage.exe,安裝API版本和對應的工具包,這些在運行模擬器和真機測試的時候會使用到。
配置環境變量
新建環境變量ANDROID_HOME,變量值為sdk的路徑:E:\Android\android-sdk
“我的電腦”右鍵菜單--->屬性--->高級--->環境變量--->系統變量-->新建
- 變量名:ANDROID_HOME
變量值:D:\android\android-sdk-windows
找到環境變量path—>“編輯”添加:
- 變量名:PATH
-
變量值:;% ANDROID_HOME%\platform-tools;
-
變量值:% ANDROID_HOME%\build-tools;
-
變量值:% ANDROID_HOME%\tools;
-
tools目錄下運行android命令,platform-tools目錄運行adb命令
檢驗Android SDK是否安裝成功:adb version
4. 安裝Appium
下載地址:https://bitbucket.org/appium/appium.app/downloads/?tab=downloads
- 安裝完成后添加到環境變量
- 把安裝的appium文件夾的Appium\node_modules.bin加到系統環境變量path中
運行appium-doctor,檢測appium運行環境的工具
5. 安裝appium-desktop
下載地址:https://github.com/appium/appium-desktop/releases/tag/v1.15.1
6. 下載Appium-Python-Client
下載鏈接:https://pypi.org/project/Appium-Python-Client/
運行python setup.py install
安裝
或者運行 pip install Appium-Python-Client
安裝。
參考文檔
-
WebDriver協議:https://w3c.github.io/webdriver/
-
Mobile JSON Wire Protocol:https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!