Appium做爲一個開源的、跨平臺的自動化測試工具,適用於測試原生或混合型移動App。node
Appium的核心是一個web服務器,他使用WebDriver json wire協議,來驅動系統的UIAutomation庫。WebDriver Json wire協議的Server端採用node.js封裝了iOS UI Automation的接口,提供提供出一套RESTFul web service的接口,這樣Client端以HTTP請求得到操縱UI的能力。web
說到底,真正執行測試的仍是 UIAutomation,Appium只是封裝或解釋了UIAutomation的執行腳本,做爲UIAutomation和被測試APP的中間層傳遞消息。json
appium的優缺點服務器
優勢:
(1) 跨平臺 - appium能夠很好的融合在addroid和iOS系統之間
(2) 支持多種語言 - 支持各類語言對appium的腳本編寫,可是好像oc的支持不太好
(3) 不依賴源代碼 - 不用依賴於源碼的支持,這是一個很突出的亮點
(4) 開源 - 這個說主要也不算主要,由於appium是給予UIAutomaiton之上的,而UIAutomation不是開源的 app
缺點:
(1) 環境配置較繁瑣 - 配置及其繁瑣,並且問題較多,須要你耐心的就一點點解決,iOS版本更爲嚴重
(2) 不支持自定義控件
(3) UIWebView的狀態不可訪問
(4) 沒法脫機跑,須要連着Mac機器 - 這是iOS自動化框架共有的硬傷
(5) 支持系統效率慢 - 這是我認爲這個框架比較嚴重的傷,因爲不是蘋果公司自有的框架,在支持上總慢一兩個月,因此不少人在適配新系統的時候比較頭疼框架
Appium是由client和server組成,client提供多種語言的API,這些API是對WebDriver的擴展和封裝,利用這些API就能夠快速編寫測試用例;client和server間經過符合Mobile JSON Wire Protocol的http請求進行交互。工具
Appuim還提供一個第三文的工具Appium Inspector測試
執行操做
滑動屏幕ui
self.driver.execute_script(「mobile: swipe」, {「touchCount」: 1 , 「startX」: x1, 「startY」: y1, 「endX」: x2, 「endY」: y2, 「duration」: 2})
點擊spa
self.driver.execute_script(「mobile: tap」, {「tapCount」: 1, 「touchCount」: 1, 「duration」: during_time, 「x」: x1, 「y」: y1 }
獲取元素內容
element = self.driver.find_element_by_xpath(r」%s」 % elementinfo) Element.txt
截圖
screenshot = self.driver.get_screenshot_as_base64()
關於app測試的執行,在啓動服務器後,執行測試腳本便可。可是測試腳本里要包含如下內容,做爲Appium的初始化,告訴Appium要測試哪臺機器上的哪一個app,以及其餘信息。