# 📱 手機自動化怎麼做?用 Appium 一行行指令操控 App
你是否曾經想過,能不能讓電腦自動幫你點開 App、輸入帳號密碼、查詢資料,甚至每天定時幫你完成這些重複性的操作?
這時候,Appium 就是你的好幫手!
Appium 作為一款開源的跨平台自動化測試工具,提供了強大的功能與靈活的架構,成為眾多企業與開發者的首選。
## 🔍 Appium 是什麼?

>https://appium.io/docs/en/latest/
Appium 是一個開源的自動化測試工具,主要用來控制手機上的 App(不管是 Android 還是 iOS),讓你可以透過程式碼自動操作 App 的各種功能。
簡單來說,它就像是手機的「遙控器」,你可以用程式語言(例如 Python、Java、JavaScript 等)寫下指令,讓 Appium 幫你在手機上自動點擊、輸入、滑動等操作。
## ⚙️ Appium 的核心架構
Appium 採用的是 Client-Server 架構,主要分為三個部分:
1. **Appium 客戶端(Client)**:
開發者使用各種程式語言(如 Java、Python、JavaScript 等)撰寫測試腳本,透過 Appium 提供的客戶端庫與 Appium Server 通訊。
2. **Appium 伺服器(Server)**:
一個基於 Node.js 的伺服器,負責接收來自客戶端的指令,並將其轉換為行動裝置可以理解的命令,進而控制裝置上的應用程式。
3. **行動裝置(Device)**:
實際執行測試指令的設備,可以是實體裝置或模擬器。Appium Server 會在裝置上部署必要的代理程式(如 `appium-uiautomator2-server` 或 `WebDriverAgent`),這些代理程式負責接收指令並與裝置的自動化框架互動。
整個流程就像是:你(Client)告訴 Appium Server 要做什麼,Appium Server 再指揮手機去執行。
## 🔄 Appium 的工作流程
Appium 的工作流程如下:
1. **初始化會話(Session)**:
客戶端發送一個包含「預期能力(Desired Capabilities)」的 `POST /session` 請求給 Appium Server,指定測試的裝置類型、平台版本、應用程式等資訊。
2. **建立會話並選擇驅動程式**:
Appium Server 根據預期能力中的 `automationName`(如 `UiAutomator2` 或 `XCUITest`)選擇相應的驅動程式,並在裝置上啟動對應的代理程式。
3. **執行測試指令**:
客戶端透過 API 發送測試指令(如點擊某個元素)給 Appium Server。
Appium Server 將指令轉發給裝置上的代理程式。
代理程式使用裝置的自動化框架執行指令,並將結果返回給 Appium Server,再由 Appium Server 傳回客戶端。
4. **結束會話**:
測試完成後,客戶端發送結束會話的請求,Appium Server 關閉與裝置的連線,並清理相關資源。
## 🧩 支援的自動化框架
Appium 根據不同的平台,使用相應的自動化框架:
* **Android**:
* **UIAutomator2**:適用於 Android 5.0(API 21)及以上版本,提供對原生應用的自動化支援。
* **Espresso**:Google 提供的 Android UI 測試框架,適用於原生應用的白盒測試。
* **iOS**:
* **XCUITest**:Apple 提供的官方 UI 測試框架,適用於 iOS 9.3 及以上版本。
## 🛠️ 為什麼選擇 Appium?
* 跨平台支援:一次撰寫的測試腳本,可以同時在 Android 和 iOS 上執行。
* 多語言支援:支援多種程式語言,讓你可以用最熟悉的語言開發。
* 無需修改 App:不需要對 App 進行任何修改或重新編譯。
* 活躍的社群:有大量的教學資源和社群支援,遇到問題不怕找不到答案。
## 🚀 實際應用場景
Appium 適用於多種測試場景,包括:
* **功能測試**:驗證應用程式的功能是否符合需求。
* **回歸測試**:在應用程式更新後,確保現有功能未受影響。
* **跨平台測試**:確保應用程式在不同平台上的一致性。
* **持續整合(CI)**:與 Jenkins 等工具整合,實現自動化測試流程。
## 📚 小結
Appium 是一個功能強大且易於上手的自動化測試工具,無論你是開發者還是測試人員,都可以透過它來提升工作效率。
如果你對自動化操作手機 App 有興趣,不妨試試看 Appium,相信你會發現它的強大與便利
###### tags: `更新上部落格`