首頁>技術>

Appium是什麼

Appium是一款用於測試MobileApp的開源自動化測試框架。它是通過使用WebDriver[Facebook開源]協議來測試iOS,Android,WindowsApp的。WebDriver與Selenium有著千絲萬縷的聯絡,很多方法的使用都很相似。

Appium支援多種語言。

>>Ruby

>>Python

>>Java

>>JavaScript

>>PHP

>>C#

>>Objective-C

根據先後順序,官方的支援力度也不同。Ruby官方支援的最好(Appiumconsole就是使用Ruby開發的)。

Appium iOS測試環境搭建方法

Appium分為UI版本與命令列版本兩種。不同在於UI版本的自帶有圖形介面,使用者體驗相對於命令列版本好。

常見依賴庫的搭建

1.安裝libimobiledevice

2.安裝 appium-doctor

程式碼1:npm install appium-doctor -g

appium-doctor --ios // appium-doctor 安裝完成後執行,檢視 iOS 相關配置是否成功。如果存在紅叉情況,安裝對應的工具就可以了。

程式碼2:![appium_doctor_test.png](https://upload-images.jianshu.io/upload_images/2159939-f8cbccea99fc3bda.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.下載 WebDriverAgent

>>進入下載後的 WebDriverAgent 資料夾

>>執行 ./Scripts/bootstrap.sh

>>直接用Xcode開啟 WebDriverAgent.xcodepro 檔案

>>配置WebDriverAgentLib和WebDriverAgentRunner的證書

>>執行成功時,在Xcode控制檯應該可以打印出一個Ip地址和埠號

命令列版本的搭建

1.安裝 Appium

2.替換 WebDriverAgent

使用上面修改過的 WebDriverAgent 替換/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver 此處的WebDriverAgent

UI 版本的搭建

1.下載Appium Desktop

2.替換 WebDriverAgent

使用上面修改過的 WebDriverAgent 替換/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/ 此處的WebDriverAgent

開發環境搭建

1.安裝 Appium Python 環境搭建

安裝 Appium 的時候遇到的錯誤

2.AssertionError: Message: An unknown server-side error occurred while processing the command. Original error: Unknown device or simulator UDID: '*'

3.Could not initialize ios-deploy make sure it is installed (npm install -g ios-deploy) and works on your system

4.npm install -g ios-deploy 失敗問題的解決方法

Appium 使用

Appium-Desktop 的使用

>>準備一個 ipa 或者 app 包。

>>執行Appium-Desktop

>>開啟start server

>>執行成功後,會彈出一個控制介面,在該介面中可以控制手機上正在執行的程式

>>在 UI 介面上我們可以檢視App UI 層次結構,可以選擇對應的控制元件。可以檢視選中的 UI 控制元件的各種值(下圖右下角所示),也可以對選中的空間進行點選,輸入值,清空值操作

關於在程式碼中如何使用 Appium

本例中使用 Python 為主要部分。

1.連線 Appium

path = "/Users/jack/Desktop/xx/xx/xx.ipa"

desired_caps = {

'app': os.path.abspath(path),

'platformName': 'iOS',

'platformVersion': '11.2.2',

'deviceName': 'iPad',

'udid': 'xxx',

'showIOSLog': 'true'

}

command_executor = 'http://127.0.0.1:4723/wd/hub'

appium_driver = webdriver.Remote(command_executor=command_executor, desired_capabilities=desired_caps)

```

**appium_driver** 就是我們需要的接入點。

2.獲取當前頁面層次結構

page_source 是 XML 文字。例子解析 XML 之後就可以看到整個頁面的佈局。

注意: 論壇中有說過當頁面資料過多的時候,可能會出現超時錯誤問題。

3.查詢指定的 UI 元素

查詢 UI 元素的方式有很多種。

>>AccessibilityIdentifier 方式查詢。推薦

>>AccessibilityIdentifier 方式查詢。不推薦,但是必須的時候還是要用

4.獲取查詢到的控制元件的值

6.長按操作

7.簡單的手勢滑動操作

8.等待頁面消失

try:

# 在 60s 每隔 0.5s 檢查是否 view 消失

WebDriverWait(driver, 60, 0.5, ElementNotVisibleException).until_not(lambda x: x.find_element_by_accessibility_id(view).is_displayed())

except TimeoutException, e:

print("time out message")

raise e

9.等待頁面出現

try:

# 在 60s 每隔 0.5s 檢查是否 view 出現

WebDriverWait(driver, 60, 0.5, ElementNotVisibleException).until(lambda x: x.find_element_by_accessibility_id(view).is_displayed())

except TimeoutException, e:

print("time out message")

raise e

iOS 裝置獲取對應的控制元件的方法

對於 iOS 端,WebDriver 使用了蘋果提供的 Accessibility Inspector 來獲取頁面層次。因此,在編寫程式碼的時候,需要設定

iOS 程式碼使用 Appium 建議條件滿足isAccessibilityElement為 true。同時accessibilityIdentifier建議有值。這樣查詢的時候在編寫程式碼會更加便捷。否則就需要如下的方式去查詢:

driver.find_element_by_xpath("//XCUIElementTypeApplication[@name=\\"LLL\\"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView/XCUIElementTypeCell")

上面的程式碼是去查詢一個 tableview cell。當然我們可以使用 UI 工具獲取到。但是當頁面 ui 層次變更了,估計改動的時候會有想死的感覺了。

iOS 裝置使用 Appium 的條件

執行 Mac 系統的電腦。提供一個可以安裝到真機上的 ipa 或者 app 包。Mac 系統建議安裝 Xcode 環境。

iOS 裝置使用 Appium 的限制

同一臺電腦只能執行一個測試例項(沒有研究出來多個測試)測試 case 編寫者必須清楚的知道自己在找什麼,需要到哪裡去找。Appium 只能針對已知的資料進行測試。對於未知的資料無法進行測試。例如:伺服器端更新 server 的資料而沒有通知 app 端。app 端仍然按照舊的資料去測試判斷,就會出現錯誤。而這種錯誤不是 app 本身的錯誤。而由人測試的時候這裡就會有主管判斷為什麼出現這種問題,中斷去查詢問題來源。測試速度慢。目前來看可以接受每次測試的時候都是重新安裝 app。因此無法進行升級類的測試[對應的 install、uninstall api 不可用]快速點選操作不可用,個別因為使用者手速過快點選導致的問題會無法測試。因為Appium API 時延比較高。裝置橫屏(在 iPad 上測試)的時候無法進行測試。Scrollview/TableView/CollectionView 滾動的問題(swap 手勢模擬有的時候很慢。一分鐘都沒反應完)。關於通知推送,點選沒有查到對應的測試資料。內嵌,外部跳轉 web 頁面的測試沒有驗證過。Crash Log 以及執行時候的 log(裝置的)無法收集。Emoji 表情輸入沒研究出來。目前看只能通過鍵盤點選達到這個效果,但是不方便。因為時延較高,查詢類頁面在輸入值的時候,應該清空頁面顯示,然後根據返回值顯示。這部分不好測試。容易出現紕漏。

關於測試結果反饋

Appium 只是一款測試 Mobile 端 app 的框架。其本身的操作僅限於針對 App 進行測試,不具備生成測試結果,傳送郵件等功能。如果想要該功能,需要在呼叫 Appium 的語言環境上思考。

由於 Demo 中使用的是 Python,因此使用 HTMLTestRunner 生成 html 格式的測試報告是最合適的方式。並且根據 Python 程式設計傳送郵件給指定的使用者。

在 case 中。如果斷言錯誤,即已知結果不是想要的結果,可以使用斷言使測試生成斷言錯誤。這樣就可以生成失敗的測試 case 報告。出現 Error 的時候有可能是由於 Python 程式碼本身不嚴謹造成的錯誤。因此當有 Error 錯誤的時候,首先考慮是否是 Python 程式碼的問題,其次考慮 App 錯誤。沒有錯誤,測試成功。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 小程式開發原理是什麼