不用寫程式一樣完成手機移動APP自動化測試 — RobotFramework實作範例
這篇文章主要說明如何透過 RobotFramework 來對於 iOS or Android App 進行自動化測試
對於 iOS or Android App 自動化測試是否需要 Java, Objective C等才可以做自動化測試呢?
其實如果使用 RobotFramework 我們只需要透過關鍵字定義的方式一樣可以完成手機App自動化測試
環境安裝
除了需要基本的 RobotFramework 運行環境之外, 我們還需要下列套件
- appium Windows下載:https://bitbucket.org/appium/appium.app/downloads/
- Appium-Python-Client https://github.com/appium/python-client
- robotframework-appiumlibrary https://pypi.python.org/pypi/robotframework-appiumlibrary/
- Genymotion 模擬器 https://www.genymotion.com/
- Oracle VirtualBox https://www.virtualbox.org/wiki/Downloads
Appium安裝可參考官網 http://appium.io/
另外筆者建議可以使用 Appium Studio, 優點是提供整体的安裝包, 省去很多個別環境設定與安裝的繁瑣
https://experitest.com/mobile-test-automation/appium-studio/
安裝Genymotion 主要原因是運行速度快! Android 模擬器往往執行速度會令人睡著,
也因為要安裝Genymotion 的緣故, 所以必須要Oracle VirtualBox 讓Genymotion 可以正常運行
Android 自動化測試腳本
在上述環境都準備好之後, 確定都可以正常運行, 接著我們可以開始撰寫第一個測試腳本
手機測試相關關鍵字指令查詢參考
http://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html
範例程式
看起來是不是跟 Selenium Web 測試很像?
*** Settings *** | |
Library AppiumLibrary | |
*** Test Cases *** | |
case1 | |
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=4.2.2 deviceName=10.1.1.1:5555 app=${CURDIR}${/}app${/}ContactManager.apk appPackage=com.example.android.contactmanager | |
Click Element accessibility_id=Add Contact | |
${source} Get Source | |
Log ${source} | |
Sleep 3s | |
Input Text xpath=//android.widget.TableRow[contains(@index,3)]/android.widget.EditText John | |
Input Text xpath=//android.widget.TableRow[contains(@index,5)]/android.widget.EditText 153546872 | |
Input Text xpath=//android.widget.TableRow[contains(@index,7)]/android.widget.EditText Testing@mail.com | |
Click Element accessibility_id=Save |
PS 範例中的App 下載 ContactManager.apk
這個範例使用幾個基本的關鍵字指令
Open Application
這個指令主要用在啟動 App 並且設定相關的環境
Open Application | http://localhost:4723/wd/hub | alias=Myapp1 | platformName=iOS | platformVersion=7.0 | deviceName=’iPhone Simulator’ | app=your.app | |
Open Application | http://localhost:4723/wd/hub | platformName=Android | platformVersion=4.2.2 | deviceName=192.168.56.101:5555 | app=${CURDIR}/demoapp/OrangeDemoApp.apk | appPackage=com.netease.qa.orangedemo | appActivity=MainActivity |
其他常用App指令
指令 | 說明 |
Input Text | 這個指令為文字輸入, 需要兩個參數, 一個為元件位置 例如Xpath, 另外一個參數為輸入的文字 |
Click Element | 點擊元件, 只需要一個參數, 就是該元件的ID, Xpath, name 等, 支援的方式可參考下列表格 |
Strategy | Example | Description | Note |
identifier | Click Element | identifier=my_element | Matches by @id attribute | |
id | Click Element | id=my_element | Matches by @resource-id attribute | |
accessibility_id | Click Element | accessibility_id=button3 | Accessibility options utilize. | |
xpath | Click Element | xpath=//UIATableView/UIATableCell/UIAButton | Matches with arbitrary XPath | |
class | Click Element | class=UIAPickerWheel | Matches by class | |
android | Click Element | android=UiSelector().description(‘Apps’) | Matches by Android UI Automator | |
ios | Click Element | ios=.buttons().withName(‘Apps’) | Matches by iOS UI Automation | |
css | Click Element | css=.green_button | Matches by css in webview | |
name | Click Element | name=my_element | Matches by @name attribute | Only valid for Selendroid |
如何取得手機元件位置呢?
Web網頁我們可以透過FireBug 或是瀏覽器的開發工具取得 CSS, ID, Name, Xpath 等
但是相對於手機App 要如何取得相關的按鈕, 輸入框等元件位置呢?
我們主要透過 Android SDK提供的 \android-sdk\tools\UI automation Viewer 或是直接使用 appium 中的 Appium Inspector
iOS 手機自動化程式範例
*** Settings *** | |
Library AppiumLibrary | |
*** Test Cases *** | |
case1 | |
Open Application http://localhost:4723/wd/hub alias=Myapp1 platformName=iOS platformVersion=9.0 deviceName=iPhone 6 app=${CURDIR}${/}app${/}TestApp.app | |
Input Text name=TextField1 13 | |
Input Text name=TextField2 22 | |
Click Button Compute Sum | |
Click Button done | |
Click Button show alert | |
Click Button OK | |
Swipe 178 356 133 356 |
這個範例跟上述類似, 除了 Open Application 指定 iOS 外, 大多的指令一樣適用
這邊特別用到 Swipe 這個手勢的指令, 參數表示開始座標與移動距離
http://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html#Swipe
對於 iOS App 要獲取元件位置直接使用 Appium Inspector 即可
RobotFramework 還提供哪些手機自動化指令呢?
http://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html