Appium 自動化測試

Appium 自動化測試

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

Appium 自動化測試

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的證書

Appium 自動化測試

Appium 自動化測試

Appium 自動化測試

>>連接並選擇自己的iOS設備,然後按Cmd+U,或是點擊Product->Test

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

命令行版本的搭建

1.安裝 Appium

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 自動化測試

安裝 Appium 的時候遇到的錯誤

  1. 未能載入軟件包“WebDriverAgentRunner”,因為它已損壞或丟失必要的資源。 請嘗試
Appium 自動化測試

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

Appium 自動化測試

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

Appium 自動化測試

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

Appium 自動化測試

Appium 使用

Appium-Desktop 的使用

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

>>運行Appium-Desktop

>>開啟start server

Appium 自動化測試

>>點擊start new session

Appium 自動化測試

>>在 Desired Capabilities 中輸入相關的參數後點擊Start Session

Appium 自動化測試

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

>>點擊界面上方中心的錄製按鈕,可以將你對手機端的操作代碼化。生成的代碼可以直接放入指定的代碼中去執行。

Appium 自動化測試

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

Appium 自動化測試

>>如上圖所示。我們還可以針對需要使用座標系統(不通用。因為不同的設備分辨率不同)點擊,手勢操作等。

關於在代碼中如何使用 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.獲取當前頁面層次結構

Appium 自動化測試

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

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

3.查找指定的 UI 元素

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

>>AccessibilityIdentifier 方式查找。推薦

Appium 自動化測試

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

Appium 自動化測試

4.獲取查找到的控件的值

Appium 自動化測試

5.已經查找到的控件點擊,輸入值,清空值操作

Appium 自動化測試

6.長按操作

7.簡單的手勢滑動操作

Appium 自動化測試

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 的條件

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

iOS 設備使用 Appium 的限制

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

關於測試結果反饋

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

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

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


分享到:


相關文章: